Swift延遲載入簡單介紹一二

2021-07-10 22:43:07 字數 795 閱讀 4423

有以下一種情況:

我們試圖用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中的延遲載入 懶載入

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

MyBatis 延遲載入介紹及配置

一 什麼是延遲載入 中有查詢語句,當執行到查詢語句時,並不是馬上去db中查詢,而是根據設定的延遲策略將查詢向後推遲。二 mybatis的延遲載入只能在對關聯物件進行查詢時使用延遲載入。三 主載入物件 關聯物件 主表 關聯表的概念 比如我們country表裡有多個國家,minister表裡有某個國家所...

Swift延遲載入的一種用途

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