我正在分析一些第三方代码,发现有一个“lazy”变量声明看起来像这样,并且我想了解在“计算属性”花括号后面的括号是做什么用的:
lazy var defaults:NSUserDefaults = {
return .standardUserDefaults()
}()
"return .standardUserDefaults()" 返回NSUserDefaults实例对象,为什么在右大括号后面加上()?
谢谢
我正在分析一些第三方代码,发现有一个“lazy”变量声明看起来像这样,并且我想了解在“计算属性”花括号后面的括号是做什么用的:
lazy var defaults:NSUserDefaults = {
return .standardUserDefaults()
}()
这意味着第一次访问defaults时执行的是一个块。没有()
表示defaults是() -> NSUserDefaults
类型的块变量。添加()
表示访问时执行的块返回的只是NSUserDefaults
。
我想举两个例子。第一个例子是您典型的计算属性
。每次调用变量时都会运行。
var num = 0
var myName: String {
print(num)
return "xxx"
}
print(myName)
// 0
// xxx
num += 1
print(myName)
// 1
// xxx
var num = 0
var myName: String = {
print(num)
return "xxx"
}()
print(myName)
// 0
// xxx
num += 1
print(myName)
// xxx
var num = 0
var myNum: Int = {
print(num)
return num
}()
print(myNum)
// 0
// 0
num += 1
print(myNum)
// 0