2017-03-09 34 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