mal*_*ena 2 parentheses swift computed-properties
我正在分析分析一些第三方代码,并且有一个看起来像这样的"懒惰"var语句,我想了解括号在"计算属性"花括号之后做了什么:
lazy var defaults:NSUserDefaults = {
return .standardUserDefaults()
}()
Run Code Online (Sandbox Code Playgroud)
"return .standardUserDefaults()"正在返回NSUserDefaults实例对象,那么为什么要在右花括号后面添加一个()?
谢谢
我想出了两个例子。第一个例子是你的典型computed property。每次调用变量时它都会运行。
var num = 0
var myName: String {
print(num)
return "xxx"
}
print(myName)
// 0
// xxx
num += 1
print(myName)
// 1
// xxx
Run Code Online (Sandbox Code Playgroud)
第二个例子是一个self-executing closure. 正如您所看到的,它仅在第一次调用时运行 print(num) 。
var num = 0
var myName: String = {
print(num)
return "xxx"
}()
print(myName)
// 0
// xxx
num += 1
print(myName)
// xxx
Run Code Online (Sandbox Code Playgroud)
为了进一步说明,我返回了 num 并查看它是否在 SEC 中发生变化。事实并非如此。这意味着该块仅在第一次调用时运行,然后为自己分配返回值。出于所有意图和目的,在第一次调用之后,MyNum 现在为 0 并且不再是一个块。
var num = 0
var myNum: Int = {
print(num)
return num
}()
print(myNum)
// 0
// 0
num += 1
print(myNum)
// 0
Run Code Online (Sandbox Code Playgroud)
这意味着访问了第一次执行默认值的块.没有()它意味着默认值是类型的变量的块类型() -> NSUserDefaults.添加()它意味着它只是NSUserDefaults访问时执行的块返回的内容.
| 归档时间: |
|
| 查看次数: |
667 次 |
| 最近记录: |