我有一個偶爾調用的方法。它依賴於我不想實例化的屬性,除非該方法被調用,但同時我不想重新實例化已經實例化的屬性。這是什麼惰性加載?只在需要時才初始化
我目前使用:
property = property ?? Property()
和這似乎是做工精細,但我想要做這種方法進行仔細的檢查。
我有一個偶爾調用的方法。它依賴於我不想實例化的屬性,除非該方法被調用,但同時我不想重新實例化已經實例化的屬性。這是什麼惰性加載?只在需要時才初始化
我目前使用:
property = property ?? Property()
和這似乎是做工精細,但我想要做這種方法進行仔細的檢查。
您只需將屬性聲明爲惰性,並且只會在需要時進行初始化。
class MyClass {
lazy var myLazyArray = [String]()
}
var myObject = MyClass() // myObject.myLazyArray still not initialized
myObject.myLazyArray.append("hello") // Now we're in business!
print(myObject.myLazyArray)
好吧很酷,我不知道懶惰屬性只能初始化一次。所以如果我做了'lazy var property = Property()',並且在某些方法中拋出了一堆'property = Property()',它只會初始化一次,而不是每次都重置爲新的Property? – RyJ
一次爲MyClass的每個實例。以下是@diatrevolo共享的一些更復雜的版本:* lazy var myMethod:Int - > Int = {[weak self] _ in return 0} * –
參考上面的@RyJ註釋,更重要的是,您可以使用property如果它已初始化。它會在首次使用時初始化它。 – diatrevolo
是的,這就是懶惰屬性的用途。 – courteouselk
是的,您好像需要在[懶惰存儲屬性]部分中的[延遲加載]屬性(https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html) – curious
爲了完整性,值得注意的是全局常量和變量(當在main.swift之外定義時)以及靜態常量和變量總是被懶惰地初始化。 –