省略括号的Swift类和闭包:语法糖还是其他什么东西?

5
我正在尝试理解为什么在类初始化时,当它接受一个块作为参数时,我可以省略圆括号。

没有括号的示例:

var block = CCActionCallBlock { () -> Void in
    NSLog("sedfjsdkl")
}

以下是正式格式的带括号版本:

var block = CCActionCallBlock ( { () -> Void in
    NSLog("sedfjsdkl")
})

两种变体都按预期工作,没有运行时错误也没有编译器警告。
在什么情况下可以省略类的初始化括号?这是相同的代码还是有任何副作用?是否还有关于闭包/块的其他语法糖需要注意?
注意:我知道最后一个参数作为闭包可以写在括号后面,但找不到任何与完全省略括号相关的内容。
例如,我不能仅仅普遍地省略类的初始化括号,似乎必须将块/闭包作为参数才能使用语法糖。
var block = MyClass   // error, obviously ...

更新:显然Xcode自动完成时会省略括号中的版本号。

1个回答

7

以下内容来自 Swift 参考文档中的 Closures 章节(重点部分已加粗):

注意

若你将闭包表达式作为函数唯一的参数,并将其作为尾随闭包提供,则在调用此函数时,无需在函数名后写一对括号 ()。


1
请注意,现在不允许“如果您需要将闭包表达式作为函数的最后一个参数传递给函数”。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接