簡體   English   中英

Swift中的惰性函數

[英]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 ,但最好的解決方案是只設置runEnginestopEngine函數。

  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM