[英]Lazy function in Swift
誰能告訴我為什么在懶惰函數runEngine和stopEngine中的這個“奇數”代碼(我對Swift; D很開心)中,從來沒有執行print方法? (請在操場上運行此代碼)。
謝謝!
protocol EngineDelegate {
func engineDidStart()
func engineDidStop()
}
class Engine {
var delegate: EngineDelegate?
lazy var runEngine : () -> () = {
print("Engine has been started")
self.delegate?.engineDidStart()
}
lazy var stopEngine : () -> () = {
print("Engine has been stoped")
self.delegate?.engineDidStop()
}
}
class Car: EngineDelegate {
let engine = Engine()
init() {
engine.delegate = self
}
func engineDidStop() {
print("MyOwnStop")
}
func engineDidStart() {
print("MyOwnStart")
}
}
let car = Car()
car.engine.runEngine()
起初,我認為惰性修飾符是不必要的,但實際上是不必要的。 實例化Engine時,其委托為nil,並且該值是閉包捕獲的值。 使用惰性延遲將捕獲延遲到設置了engine.delegate為止。 雖然我們也許可以某種方式使用@autoclosure
,但最好的解決方案是只設置runEngine
和stopEngine
函數。
func runEngine() {
print("Engine has been started")
delegate?.engineDidStart()
}
func stopEngine() {
print("Engine has been stoped")
delegate?.engineDidStop()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.