【发布时间】:2017-10-04 22:22:06
【问题描述】:
这是一个简单的 Swift 函数
fileprivate func test()->String{
let c = Array("abc".characters)
let k = UInt32(c.count)
let r = Int(arc4random_uniform(k))
return String(c[r])
}
(我之所以选择这个示例,显然是因为您可能会调用数十亿次来生成某种输出;因此您可能会担心设置这两个常量时的性能。)
请注意,要获得c,必须进行一些计算,实际上要获得k,它必须使用c。
我的问题很简单:每次调用这个函数
test()
test()
test()
事实上,它会计算k 和/或c每次我调用它时, 还是它们只计算一次?
(如果“只有一次”,那么出于好奇:我第一次调用该函数时它会这样做吗?或者编译器可能会安排在启动时单独完成它?或者它是否知道它可以计算他们在编译期间?)
我经常使用全局计算属性,比较喜欢这样
let basicDF : DateFormatter = {
print("this will only be done once per launch of the app")
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter
}()
(也许是fileprivate)如果上面问题的答案是“不,c 和'k' 每次调用测试时都会计算”,那么在这种情况下你怎么能把一种静态计算函数内的属性??
【问题讨论】:
标签: swift static computed-properties