2014-06-13 25 views
3

回顧由apple提供的用於在swift中構建核心數據堆棧的樣板代碼,我發現爲堆棧中的每個項目創建了兩個變量,例如, managedObjectModel和_managedObjectModel。我的理解是,一個屬性的內部存儲變量是由swift在內部創建和管理的,爲什麼我們必須手動創建一個?爲什麼我們不能只創建一個屬性,並讓swift處理創建過程,如果在調用它時它不存在。提前致謝。蘋果核心數據模板中的屬性聲明

回答

4

兩個屬性不被創建 - 一個是存儲屬性和一個是計算屬性。該模式是:

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 (/* ... */) 
    } 
} 
+0

感謝您的答覆。它對我來說很清楚。所以你不能使用一個方法/ func /財產,這兩個?計算一個屬性,如果它沒有被創建,並存儲它以備下次使用? @lazy怎麼樣?仍然不存儲該物業?抱歉有這些問題。我想我可以複製並粘貼樣板代碼,但我想了解...再次感謝。 – MoBro

+0

'@ lazy'會導致存儲的屬性;在首次訪問lazy屬性時計算該屬性的值。正如你所說的,他們的樣板代碼中使用的蘋果模式是可以使用@lazy的。見上面的編輯。 – GoZoner

+1

謝謝你一堆。很好的幫助 – MoBro