单线闭合,无返回类型

时间:2014-06-10 20:37:57

标签: swift

在Swift中,如果一个闭包只包含一个语句,它会自动返回从该单个语句返回的值。

在所有情况下,这都不是很自然。让我们看一个例子:

func StringReturningFunc() -> String {
    return "Test String"
}

// Error: Cannot convert the expressions type '() -> $T0' to type 'String'
let closure: () -> () = {
    StringReturningFunc()
}

正如您所看到的,即使闭包只应调用一个简单函数,它也会尝试自动返回它的返回值,类型为String,并且与返回类型{不匹配} {1}}。

我可以通过实现这样的闭包体来防止这种情况:

void

令人难以置信的奇怪。

有更好的方法可以做到这一点,还是这只是我必须忍受的事情?

2 个答案:

答案 0 :(得分:25)

发生这种情况的原因是单行表达式闭包的简写。有隐含的回报'在你写的关闭中。

let closure: () -> () = {
    StringReturningFunc()
    return
}

写它应该工作

答案 1 :(得分:0)

这个怎么样......;)

@discardableResult func StringReturningFunc() -> String {
    return "Test String"
}

// Error: Cannot convert the expressions type '() -> $T0' to type 'String'
let closure: () -> () = {
    StringReturningFunc()
}