我试图理解为什么在将 block 作为参数时可以在类初始化中省略圆括号。
没有括号的例子:
var block = CCActionCallBlock { () -> Void in
NSLog("sedfjsdkl")
}
这是带括号的形式上正确的版本:
var block = CCActionCallBlock ( { () -> Void in
NSLog("sedfjsdkl")
})
两种变体都按预期工作,没有任何运行时错误或编译器警告。
在什么情况下我可以省略类的初始化括号?这是相同的代码还是有任何副作用?关于闭包/ block ,还有其他我应该注意的语法糖吗?
注意:我知道一个闭包作为最后一个参数可以写在括号之后,但找不到与省略括号相关的任何内容完全。
例如,我不能只是一般地省略类初始化括号,它似乎必须将 block /闭包作为语法糖工作的参数:
var block = MyClass // error, obviously ...
更新: 显然,Xcode 会自动完成没有括号的版本。
最佳答案
来自 Closures在 Swift 引用中(添加了重点):
NOTE
If a closure expression is provided as the function’s only argument and you provide that expression as a trailing closure, you do not need to write a pair of parentheses () after the function’s name when you call the function.
关于class - Swift 类省略带闭包的括号 : syntactic sugar or something else?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27405122/