语法
正如@findall在评论中所说,您基本上是创建一个函数并执行它。
为了澄清语法,我将尝试在JavaScript中创建一个示例。
考虑以下代码片段:
示例 #1
//creates a global variable
var globalString = "Very important global string";
这行代码一被解释,就会在内存中创建并存储此字符串。现在将其与另一种实现进行比较:
示例2
var globalString = function() {
return "Very important global string";
};
第二种实现方式不创建一个字符串,而是创建一个最终生成字符串的函数。
在 Swift 中,当你使用
{...}()
语法声明一个变量时,实际上做的事情类似于
例子 #2。
用例
何时声明这种变量会有用?当声明需要进行一些额外设置时。
在问题中发布的示例中,NSDateFormatter 可能需要进行一些额外步骤才能按照应用程序预期的方式实例化。换句话说:
class ThisClass {
static var dateFormatter = NSDateFormatter()
func userFormatter() {
ThisClass.dateFormatter.dateFormat = "yyyy-MM-dd"
}
}
这个例子可以很好地替代为:
class ThisClass {
static var dateFormatter: NSDateFormatter = {
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter
}()
func userFormatter() {
}
}
{ ... }
创建一个没有参数并返回NSDateFormatter
的闭包实例,而()
则调用该闭包并获取闭包创建的NSDateFormatter
。 - findallNSDateFormatter()
)都应该可以使用,例如var formatter: NSDateFormatter = NSDateFormatter()
或...= theReturnValueOfSomeClosure()
,如果您需要在将其分配给属性之前初始化和进一步配置结果。 - Joshua Nozzi