3
回顧由apple提供的用於在swift中構建核心數據堆棧的樣板代碼,我發現爲堆棧中的每個項目創建了兩個變量,例如, managedObjectModel和_managedObjectModel。我的理解是,一個屬性的內部存儲變量是由swift在內部創建和管理的,爲什麼我們必須手動創建一個?爲什麼我們不能只創建一個屬性,並讓swift處理創建過程,如果在調用它時它不存在。提前致謝。蘋果核心數據模板中的屬性聲明
回顧由apple提供的用於在swift中構建核心數據堆棧的樣板代碼,我發現爲堆棧中的每個項目創建了兩個變量,例如, managedObjectModel和_managedObjectModel。我的理解是,一個屬性的內部存儲變量是由swift在內部創建和管理的,爲什麼我們必須手動創建一個?爲什麼我們不能只創建一個屬性,並讓swift處理創建過程,如果在調用它時它不存在。提前致謝。蘋果核心數據模板中的屬性聲明
兩個屬性不被創建 - 一個是存儲屬性和一個是計算屬性。該模式是:
class Foo {
var _bar : Bar
var bar : Bar { return _bar }
}
的var _bar
被存儲但var bar
被計算。具體的蘋果模式用於初始化懶洋洋地存儲的屬性像這樣:
class Foo {
var _bar : Bar? = nil
var bar : Bar {
if _bar == nil {
/* compute some stuff */
_bar = Bar (/* ... */)
}
return _bar!
}
}
以上是使用非常像一個@lazy property
。你可以使它與:
class Foo {
@lazy var bar : Bar = computeBar()
func computeBar() -> Bar {
/* compute some stuff */
return Bar (/* ... */)
}
}
感謝您的答覆。它對我來說很清楚。所以你不能使用一個方法/ func /財產,這兩個?計算一個屬性,如果它沒有被創建,並存儲它以備下次使用? @lazy怎麼樣?仍然不存儲該物業?抱歉有這些問題。我想我可以複製並粘貼樣板代碼,但我想了解...再次感謝。 – MoBro
'@ lazy'會導致存儲的屬性;在首次訪問lazy屬性時計算該屬性的值。正如你所說的,他們的樣板代碼中使用的蘋果模式是可以使用@lazy的。見上面的編輯。 – GoZoner
謝謝你一堆。很好的幫助 – MoBro