Создать задержку в блоке кода в Swift 3

-3

Следующий код не печатает привет после задержки.

Ничего плохого?

 func delay(seconds delay:Int, closure:@escaping ()->()) {

    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(delay)) {
        closure()
    }
}

delay(seconds: 5) { 
    print("hello")
}
  • 0
    Я бы попробовал сделать это в Xcode, а не на детской площадке. Кроме того, напечатайте что-то между строк, чтобы выяснить, какие части функций работают. Кроме того, Xcode немного лучше рассказывает вам, что происходит, а не игровая площадка.
Теги:

3 ответа

0

Я получил его работу, создав 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)) {}
-2
func delay(_ delay:Double, closure:@escaping ()->()) {
    let when = DispatchTime.now() + delay
    DispatchQueue.main.asyncAfter(deadline: when, execute: closure)
}

использовать:

    delay(2.0, closure: {
        something()
    })
-2
let delayInSeconds = 5.0

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayInSeconds) {

print("hello")

}
  • 0
    Вы можете запустить это на детской площадке, привет все равно не будет напечатан.
  • 0
    Если вы запускаете это на игровой площадке, вы должны включить следующие две строки: import PlaygroundSupport и PlaygroundPage.current.needsIndefiniteExecution = true
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню