2016-02-12 83 views
2

我有一個偶爾調用的方法。它依賴於我不想實例化的屬性,除非該方法被調用,但同時我不想重新實例化已經實例化的屬性。這是什麼惰性加載?只在需要時才初始化

我目前使用:

property = property ?? Property() 

和這似乎是做工精細,但我想要做這種方法進行仔細的檢查。

+1

是的,這就是懶惰屬性的用途。 – courteouselk

+1

是的,您好像需要在[懶惰存儲屬性]部分中的[延遲加載]屬性(https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html) – curious

+0

爲了完整性,值得注意的是全局常量和變量(當在main.swift之外定義時)以及靜態常量和變量總是被懶惰地初始化。 –

回答

3

您只需將屬性聲明爲惰性,並且只會在需要時進行初始化。

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) 
+0

好吧很酷,我不知道懶惰屬性只能初始化一次。所以如果我做了'lazy var property = Property()',並且在某些方法中拋出了一堆'property = Property()',它只會初始化一次,而不是每次都重置爲新的Property? – RyJ

+1

一次爲MyClass的每個實例。以下是@diatrevolo共享的一些更復雜的版本:* lazy var myMethod:Int - > Int = {[weak self] _ in return 0} * –

+0

參考上面的@RyJ註釋,更重要的是,您可以使用property如果它已初始化。它會在首次使用時初始化它。 – diatrevolo