我有一个我无法理解的问题,我有返回 Void 的完成处理程序?
_ completionHandler: @escaping ((Int) -> Void?)
当我像这样使用它时:service.getItems({ val in
row.hidden = Condition.init(booleanLiteral: val == 0)
row.evaluateHidden()
})
xCode 显示一个Missing return in a closure expected to return 'Void?'
所以我必须补充
return nil
更重要的是,如果我只有 1 行关闭,我不需要返回(我假设它将 1 行视为返回)。在返回 null 的闭包中返回 nil 有什么意义?这是一个错误还是某种我不明白的快速功能?
最佳答案
在您的闭包中指定了返回类型(这里是 Optional Void Void?
),因此编译器将始终期望返回值作为函数或闭包的结果。
由于这是一个可选的 Void Void?
您仍然必须返回 nil
或返回 Void
.在返回类型为非可选的函数/闭包中 Void
(与此处没有返回类型 f.e 相同:func returnVoid() { /* do something */ }
您不必显式编写 return 关键字,但是编译器无论如何都会将其插入到函数中。
是的,从 Swift 5.1 开始,当只有一个表达式时,您可以省略 return 关键字。 (Source)
至于您的情况,您可以将完成处理程序更改为:_ completionHandler: @escaping ((Int) -> Void)
或等效 _ completionHandler: @escaping ((Int) -> ())
可选空Void?
因为您的情况下的返回类型似乎没有必要。
关于swift - 关闭时缺少返回预计返回 'Void?',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65036638/