Swift类省略括号括号:句法糖还是别的什么?

时间:2014-12-10 15:45:36

标签: class swift syntax closures syntactic-sugar

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

没有括号的示例:

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

这是带正方形的正式版本:

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

两种变体都按预期工作,没有任何运行时错误,也没有编译器警告。

在哪种情况下我可以省略课程'初始化括号?这是相同的代码还是有任何副作用?关于我应该注意的闭包/块的其他语法糖吗?

注意:我意识到一个闭包作为最后一个参数可以在括号后写出,但无法找到任何相关内容完全省略括号。

例如,我通常不能省略类初始化括号,似乎必须使用块/闭包作为语法糖的参数:

var block = MyClass   // error, obviously ...

更新 显然Xcode自动填充到没有括号的版本。

1 个答案:

答案 0 :(得分:6)

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

  

请注意

     

如果提供闭包表达式作为函数的唯一参数   并且您将该表达式提供为尾随关闭,您执行不需要   当你在函数的名字后写一对圆括号()   调用函数。