迅捷的编译器为何认为闭包在拖尾?

时间:2019-04-02 22:56:41

标签: swift

我正试图声明一个无效的返回闭包,并在另一个表达式之后立即使用它。因此,我意识到编译器没有“看到”空格,但是为什么它认为someFunc有明显的闭包参数呢?换句话说,;为什么是必需的?

func someFunc() {

}

func someFunc2() {
    someFunc();

    { arg in
        print("\(arg + 1)")
    }(0)
}

当删除分号时,xcode给出错误“传递给不带参数的调用的参数”。这真的是根据设计吗?

2 个答案:

答案 0 :(得分:0)

git show stash@{0}是结尾闭包的更常见形式,但是不一定必须省略方括号(实际上,如果闭包之前还有其他参数,则必须使用方括号),这意味着f { /* closure contents here */ }也是有效的结尾闭包。

有些人喜欢以新行开头f() { /* closure contents here */ }(例如,我知道这是C#中的约定),所以您看到的这种行为看起来像是要容纳这些人。

答案 1 :(得分:0)

您说“我正在尝试声明一个返回空值的闭包”。但是您没有在函数return中声明关闭

因此更改为:-

func someFunction() {
    print("Some function is call")
}

func someFunction2() -> ((_ arg: Any) -> Void) {
    someFunction()

    return { arg in
        print("Closure return")
    }
}