2016-02-06 31 views
2

我分析分析一些第三方的代码,并有看起来像这样的“偷懒” var语句,我想了解一下括号内的“计算的财产”大括号后做:惰性var定义之后括号做了什么?

lazy var defaults:NSUserDefaults = { 
    return .standardUserDefaults() 
}() 

“return .standardUserDefaults()”正在返回NSUserDefaults实例对象,那么为什么要在右大括号后面添加一个()?

谢谢

回答

3

这意味着它的一个块被执行的第一次默认值被访问。如果没有(),则表示缺省值是() -> NSUserDefaults类型变量的块类型。当你添加()这意味着它只是NSUserDefaults这是由访问时执行的块返回的。

+0

谢谢,是的,这是有道理的。令我困惑的是,花括号使它看起来像没有得到的“计算属性”。编译器如何知道它不是一个计算属性,而是一个块/闭包? – malena

+2

块末尾的()表示块调用,而不是块本身。 –

+1

我还没有完全理解它 - 它是封闭的吗?有没有详细解释呢?这个解释(似乎确定)必须在Apple的快速文档中......我可以在哪里找到它?我还想知道在一本好的Swift书中能找到什么?我搜查了苹果书和其他书籍,但没有发现任何东西 – mlev