在Swift中,如果一个闭包只包含一条语句,它会自动返回从该语句返回的值。
但在某些情况下,这种行为并不是很自然。让我们看一个例子:
func StringReturningFunc() -> String {
return "Test String"
}
// Error: Cannot convert the expressions type '() -> $T0' to type 'String'
let closure: () -> () = {
StringReturningFunc()
}
正如您所看到的,即使闭包只应调用一个简单的函数,它也会尝试自动返回其返回值,该返回值的类型为String
,并且与返回类型void
不匹配。
我可以通过以下方式实现闭包体来防止这种情况:
let _ = StringReturningFunc()
这感觉非常奇怪。
有没有更好的方法来解决这个问题,还是我只能忍受它?
return
语句。 - Erikclass A { func method() {} }; var a: A? = nil; var closure: () -> () = { a?.method() }
。这是同样的错误,但是由于Void
和Void?
之间的不匹配而引起的。 - Sulthana?.method()
的意思是“如果 a 不为 nil,在其上调用 method,如果为 nil,则返回 nil”。因此 void 必须是可选的(void 不等同于 nil)。 - IluTov