在Swift中,如果闭包只保存一个语句,它会自动返回从该单个语句返回的值.
在所有情况下,这都不是很自然.我们来看一个例子:
func StringReturningFunc() -> String {
return "Test String"
}
// Error: Cannot convert the expressions type '() -> $T0' to type 'String'
let closure: () -> () = {
StringReturningFunc()
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,即使闭包只应调用一个简单的函数,它也会尝试自动返回它的返回值,该值是类型String,并且与返回类型不匹配void.
我可以通过实现这样的闭包体来防止这种情况:
let _ = StringReturningFunc()
Run Code Online (Sandbox Code Playgroud)
这感觉非常奇怪.
有没有更好的方法来做到这一点,或者这只是我必须忍受的东西?
Jos*_*erg 25
发生这种情况的原因是单行表达式闭包的简写.在写入时,闭包中有一个隐含的"返回".
let closure: () -> () = {
StringReturningFunc()
return
}
Run Code Online (Sandbox Code Playgroud)
写它应该工作
| 归档时间: |
|
| 查看次数: |
5130 次 |
| 最近记录: |