在Swift中,如果一个闭包只包含一个语句,它会自动返回从该单个语句返回的值。
在所有情况下,这都不是很自然。让我们看一个例子:
func StringReturningFunc() -> String {
return "Test String"
}
// Error: Cannot convert the expressions type '() -> $T0' to type 'String'
let closure: () -> () = {
StringReturningFunc()
}
正如您所看到的,即使闭包只应调用一个简单函数,它也会尝试自动返回它的返回值,类型为String
,并且与返回类型{不匹配} {1}}。
我可以通过实现这样的闭包体来防止这种情况:
void
令人难以置信的奇怪。
有更好的方法可以做到这一点,还是这只是我必须忍受的事情?
答案 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()
}