В более ранних версиях Swift можно было создать задержку с помощью следующего кода:
let time = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), 4 * Int64(NSEC_PER_SEC))
dispatch_after(time, dispatch_get_main_queue()) {
//put your code which should be executed with a delay here
}
Но теперь, в Swift 3, Xcode автоматически меняет 6 разных вещей, но затем появляется следующая ошибка: «Не удается преобразовать DispatchTime.now
в ожидаемое значение, dispatch_time_t
иначе UInt64
».
Как создать задержку перед запуском последовательности кода в Swift 3?
DispatchQueue.main.asyncAfter(deadline: when)
Мне нравится однострочная нотация для GCD, она более элегантна:
Также в iOS 10 появились новые методы Timer, например, инициализатор блока:
(поэтому отложенное действие может быть отменено)
Кстати, имейте в виду: по умолчанию таймер добавляется в режим цикла выполнения по умолчанию. Это означает, что таймер может быть заморожен, когда пользователь взаимодействует с пользовательским интерфейсом вашего приложения (например, при прокрутке UIScrollView). Вы можете решить эту проблему, добавив таймер в определенный режим цикла выполнения:
В этом блоге вы можете найти более подробную информацию.
источник
Попробуйте следующую функцию, реализованную в Swift 3.0 и выше
использование
источник
Попробуйте приведенный ниже код для задержки
источник
Одним из способов является использование,
DispatchQueue.main.asyncAfter
как многие люди ответили.Другой способ заключается в использовании
perform(_:with:afterDelay:)
. Подробнее здесьисточник
// Запускает функцию через х секунд
// Использование: -
источник