Swift延遲載入的一種用途分析

2021-12-29 21:01:52 字數 718 閱讀 1108

有以下一種情況:我們試圖用cocoa的語音合成類nsspeechsynthesizer來完成對字串的朗讀,這很容易.但是我們還有乙個附加條件,就是在朗讀完一段文字後觸發乙個動作.

這貌似也不難,我們只要遵守nsspeechsynthesizerdelegate協議即可,但是光這樣還不行,我們還必須將nsspeechsynthesizer例項的delegate屬性設定為合適的委託物件.

作為乙個簡單的例子,我們會用乙個viewcontroller來作為nsspeechsynthesizer的委託物件,所以我們可以這樣寫:

let speechsythesizer = nsspeechsythesizer()

override func viewdidload() 這樣很美好,不過非要在viewdidload裡面賦值委託物件嗎?不可以在預設屬性中來完成嗎?

本貓想了一會,於是有了如下**:

let speechsynthesizer:nsspeechsynthesizer = ()不幸的是,以上**不能正確執行,因為其中的self並沒有代表viewcontroller的例項物件.所以此路不通.

所幸的是swift為我們提供了一種延時載入(又稱惰性載入)屬性的機制,我們可以這樣寫:

lazy var speechsynthesizer:nsspeechsynthesizer = ()很好很強大!

需要注意的是lazy修飾的屬性初始化**只會被執行一次,無論你訪問該屬性多少次!  

Swift延遲載入的一種用途

有以下一種情況 我們試圖用cocoa的語音合成類nsspeechsynthesizer來完成對字串的朗讀,這很容易.但是我們還有乙個附加條件,就是在朗讀完一段文字後觸發乙個動作.這貌似也不難,我們只要遵守nsspeechsynthesizerdelegate協議即可,但是光這樣還不行,我們還必須將n...

Swift中的延遲載入 懶載入

而在swift中,你只需一行 即可實現此機制 lazy var players string 簡單 簡潔,直入主題。但你得記住,你必須使用var關鍵字來定義延遲載入的屬性,不能使用let關鍵字,因為常量必須在例項構建時賦值。lazy var players string 如果你願意,你也可以使用例項...

一種延遲方法呼叫的實現

原文 一種延遲方法呼叫的實現 需求場景 實現 定義任務介面 1inte ce itask 2 4 bool isrunning 5 void start 6 void stop 7 void run 8 定義延遲的資訊類 1class lazyitem 2 9 10public string key...