Я хотел проверить 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
Заранее спасибо.