dispatch_after()
- стандартный способ отсрочки действий.
indicator.startAnimating()
let delay = 4.5 * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue()) {
indicator.stopAnimating()
}
См: dispatch_after - GCD in swift?
Обновление для Swift 3.0
indicator.startAnimating()
let delay = Int(4.5 * Double(1000))
DispatchQueue.main.after(when: .now() + .milliseconds(delay)) {
indicator.stopAnimating()
}
Однако, в духе Свифта 3.0, я думаю, что расширение DispatchQueue
будет лучшим решением.
extension DispatchQueue {
func delay(_ timeInterval: TimeInterval, execute work:() -> Void) {
let milliseconds = Int(timeInterval * Double(1000))
after(when: .now() + .milliseconds(milliseconds), execute: work)
}
}
Это оставляет нас с очень хорошим
indicator.startAnimating()
DispatchQueue.main.delay(4.5) {
indicator.stopAnimating()
}
Update 2
Копания в 8.0 бета Xcode, я нашел public func +(time: DispatchTime, seconds: Double) -> DispatchTime
. Так что, я думаю, это справедливо ...
indicator.startAnimating()
DispatchQueue.main.after(when: .now() + 4.5) {
indicator.stopAnimating()
}
Я не думаю, что есть необходимость в расширении DispatchQueue
для чего-то это чистой уже.
-
Обновление для Swift 3.1
Существует новый синтаксис для Swift 3.1. Им просто нравится что-то менять, не так ли.
indicator.startAnimating()
DispatchQueue.main.asyncAfter(deadline: .now() + 4.5) {
indicator.stopAnimating()
}
См. 'NSTimer' или' dispatch_after'. – Rob