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参考中的(添加了强调):
注
如果闭包表达式作为函数的唯一参数提供
如果将该表达式作为尾随闭包提供,则不需要
在调用函数时,在函数名后写一对括号()
调用函数