Ожидание выполнения Swift Timer - PullRequest
0 голосов
/ 13 апреля 2020

Я хотел проверить lazy -изменность отложенной переменной, как показано ниже.

import Foundation

class LazyChecker {
    lazy var value = Date()
}

print(Date())
let tooLazy = LazyChecker()

let timer = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: true, block: { (timer) in
    print(tooLazy.value)
})

Но программа немедленно прекратила выполнение, не ожидая выполнения блока таймера. Затем я дождался основного потока, добавив readLine() следующим образом

/// ... Previous code
let timer = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: true, block: { (timer) in
    print(tooLazy.value)
})

let line = readLine()

Ожидал выполнения блока таймера, но ничего не произошло.

Затем я наткнулся на этот ответ , используя CFRunLoopRun() вместо readLine(). Это сработало.

Я прочитал документацию как CFRunLoopRun(), так и readLine(), но не смог понять, почему readLine() не подходит для этой цели ожидания?

Я запустил код, используя Командная строка выглядит следующим образом:

swift SOURCE_FILE_NAME.swift

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...