Следующий код не печатает привет после задержки.
Ничего плохого?
func delay(seconds delay:Int, closure:@escaping ()->()) {
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(delay)) {
closure()
}
}
delay(seconds: 5) {
print("hello")
}
Я получил его работу, создав runloop, иначе программа просто выйдет без вызова асинхронного блока. Это не нужно, если вы разрабатываете приложение для iOS.
var keepAlive = true
func delay(seconds delay:Int, closure:@escaping ()->()) {
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(delay)) {
closure()
}
}
delay(seconds: 5) {
print("hello")
keepAlive = false
}
let runLoop = RunLoop.current
while keepAlive && runLoop.run(mode: .defaultRunLoopMode, before: Date(timeIntervalSinceNow: 0.1)) {}
func delay(_ delay:Double, closure:@escaping ()->()) {
let when = DispatchTime.now() + delay
DispatchQueue.main.asyncAfter(deadline: when, execute: closure)
}
использовать:
delay(2.0, closure: {
something()
})
let delayInSeconds = 5.0
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayInSeconds) {
print("hello")
}
import PlaygroundSupport
и PlaygroundPage.current.needsIndefiniteExecution = true