Class Swift类省略带闭包的括号:语法糖还是其他?

Class Swift类省略带闭包的括号:语法糖还是其他?,class,swift,syntax,closures,syntactic-sugar,Class,Swift,Syntax,Closures,Syntactic Sugar,我试图理解为什么在类初始化中,当它以块为参数时,我可以省略圆括号 不带括号的示例: var block = CCActionCallBlock { () -> Void in NSLog("sedfjsdkl") } var block = CCActionCallBlock ( { () -> Void in NSLog("sedfjsdkl") }) 下面是带括号的正式正确版本: var block = CCActionCallBlock { () ->

我试图理解为什么在类初始化中,当它以块为参数时,我可以省略圆括号

不带括号的示例:

var block = CCActionCallBlock { () -> Void in
    NSLog("sedfjsdkl")
}
var block = CCActionCallBlock ( { () -> Void in
    NSLog("sedfjsdkl")
})
下面是带括号的正式正确版本:

var block = CCActionCallBlock { () -> Void in
    NSLog("sedfjsdkl")
}
var block = CCActionCallBlock ( { () -> Void in
    NSLog("sedfjsdkl")
})
这两个变体都按预期工作,没有任何运行时错误或编译器警告

在什么情况下可以省略类的初始值设定项括号?这是相同的代码还是有任何副作用?关于闭包/块,我还应该注意其他语法方面的问题吗

注意:我知道作为最后一个参数的闭包可以写在括号之后,但是找不到任何与完全省略括号相关的内容

例如,我不能忽略类init方括号,它似乎必须将block/closure作为语法糖的参数:

var block = MyClass   // error, obviously ...
更新: 显然,Xcode自动完成到不带括号的版本。

来自Swift参考中的(添加了强调):

如果闭包表达式作为函数的唯一参数提供 如果将该表达式作为尾随闭包提供,则不需要 在调用函数时,在函数名后写一对括号() 调用函数