2017-03-09 63 views
1

Swift 3中有沒有什麼方法可以讓一個計算屬性的類在第一次計算上很昂貴,但是之後會保持不變,以便具有不同的getter(每個後續請求都有一個初始值,然後是另一個值)?即Swift屬性的多個Getters?

class Example { 
    var computationallyIntensive: String? { 
     return try? String(contentsOf: unlistedFile, encoding: .utf8) 
    } 
} 

我知道初始值設定項,但是這個屬性不需要在創建類時初始化。

理想的情況下,第二次調用將返回更快第一:

let test = Example() 
if test.computationallyIntensive == "base case" { 
    print(test.computationallyIntensive) 
} 

回答

2

使用Lazy Stored Property

lazy var computationallyIntensive: String? = computeComputationallyIntensive() 

func computeComputationallyIntensive() -> String? { 
    return try? String(contentsOf: unlistedFile, encoding: .utf8) 
} 

computeComputationallyIntensive調用,如果有的話,將在第一次調用期間發生computationallyIntensive

+0

有什麼辦法可以將一個setter添加到一個懶惰的var?換句話說,懶惰變量與計算屬性一起工作嗎? –

+0

@BrandonBradley我的理解是,懶惰屬性必須計算,所以他們不允許setter。 – dasblinkenlight