Объявите переменную наподобие currentVisibleViews в вашем ViewController, и давайте сначала скажем, что видна только первая, поэтому мы начинаем с числа как 1, а также добавляем ваши представления в массив для более легкого управления: ]
В viewDidLoad
добавьте свои взгляды в viewArray
:
view1.isHidden = false
view2.isHidden = true
view3.isHidden = true
viewArray.append(view1)
viewArray.append(view2)
viewArray.append(view3)
Затем в вашей кнопке:
@IBAction func addViewButton(_ sender: Any) {
if currentVisibleViews > 2 {
viewArray.forEach { (view) in
view.isHidden = true
}
currentVisibleViews = 0
} else {
viewArray[currentVisibleViews].isHidden = false
currentVisibleViews += 1
}
}
Код выше работает так:
[ 119]Таким образом, вы можете иметь только одну функцию для управления всеми вашими представлениями, это больше не должно быть IBAction, это может быть просто метод вашего ViewController
Часто, когда у меня были проблемы производительности с httplib, проблема не была с самим httplib, но с тем, как я использую его. Вот несколько распространенных ошибок:
(1) Не делайте новое соединение TCP для каждого веб-запроса. Если Вы выполняете много запроса к тому же серверу вместо этого шаблона:
conn = httplib.HTTPConnection("www.somewhere.com") conn.request("GET", '/foo') conn = httplib.HTTPConnection("www.somewhere.com") conn.request("GET", '/bar') conn = httplib.HTTPConnection("www.somewhere.com") conn.request("GET", '/baz')
Сделайте это вместо этого:
conn = httplib.HTTPConnection("www.somewhere.com") conn.request("GET", '/foo') conn.request("GET", '/bar') conn.request("GET", '/baz')
(2) Не сериализируйте свои запросы. Можно использовать потоки или asynccore или независимо от того, что Вам нравится, но если Вы выполняете несколько запросов с различных серверов, можно улучшить производительность путем выполнения их параллельно.
Пользователи являются complainging, что приложение является медленным. Я подозреваю, что это может произойти частично из-за клиента HTTP, который я использую.
Я мог улучшить производительность путем замены httplib с чем-то еще?
Вы подозреваете это, или действительно ли Вы уверены, что это это httplib
? Профиль, прежде чем Вы сделаете что угодно для улучшения производительности приложения.
Я нашел свою собственную интуицию на том, где время проведено, часто довольно плохо (учитывая, что нет некоторого ядра кода, выполняемого миллионы времен). Действительно неутешительно реализовать что-то для улучшения производительности, затем тянут приложение и видят, что это не имело никакого значения.
Если Вы не являетесь профильными, Вы стреляете в темноте!
PyCurl является потрясающей, и чрезвычайно высокой производительностью.
httplib2 является другой опцией: http://code.google.com/p/httplib2/
Я никогда не сравнивал или представлял его по сравнению с httplib, но я также интересовался бы любыми результатами там.
Обновление декабря 2012: Я больше не использую httplib2. теперь использование Запросов: HTTP Для Людей, для любого http с Python.
Поскольку другие ответили, что httplib2 является хорошей альтернативой, потому что он обрабатывает заголовки правильно и может кэшировать ответы, но я сомневаюсь, что это помогло бы в производительности POST.
Альтернатива, которая могла бы на самом деле дать Вам повышение производительности для POST, особенно в Windows, является новым клиентом HTTP 1.1 в Twisted.web
Вы, кажется, предполагаете, что это - библиотека. Его открытый исходный код, таким образом, стоило бы проверить код, чтобы видеть, ли это.
Вы упоминаете отправку большого количества данных по HTTP. inefficieny мог бы быть из-за библиотеки, но HTTP не является самым эффективным протоколом для отправки больших объемов данных. С другой стороны это могло быть простое использование библиотеки (Вы отправляете большую строку или список, или используете поток или генераторы?).
httplib2 является очень хорошим вариантом. Joe Gregorio исправил много ошибок httplib.