【发布时间】:2014-06-10 20:37:57
【问题描述】:
在 Swift 中,如果闭包只包含一个语句,它会自动返回从该单个语句返回的值。
这在所有情况下都不是很自然。我们来看一个例子:
func StringReturningFunc() -> String {
return "Test String"
}
// Error: Cannot convert the expressions type '() -> $T0' to type 'String'
let closure: () -> () = {
StringReturningFunc()
}
正如你所看到的,即使闭包应该只调用一个简单的函数,它也会尝试自动返回它的返回值,它的类型为String,并且与返回类型void不匹配。
我可以通过像这样实现闭包体来防止这种情况:
let _ = StringReturningFunc()
这感觉非常奇怪。
有没有更好的方法来做到这一点,或者这只是我必须忍受的事情?
【问题讨论】:
-
我认为这是一个很好的问题。但添加一个“有更好的解决方案吗?”可能会有所帮助。阻碍票数接近。
-
@CraigOtis 编辑了我的问题,感谢您的提示。
-
我不明白这个意思,你的stringreturningfunc显式返回一个字符串,你怎么能说闭包返回()?
-
@EdgarAroutiounian 仅仅因为闭包调用
stringReturningFunc并不意味着它也应该返回String。在这里它应该什么都不返回,而不是String。 -
@EdgarAroutiounian 他试图执行函数并丢弃返回,但是在单行闭包上有一个隐含的
return语句。
标签: swift