swift - 关闭时缺少返回预计返回 'Void?'

标签 swift

我有一个我无法理解的问题,我有返回 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/

相关文章:

ios - 如何知道用户没有触摸键盘?

swift - NSInputStream/NSOutputStream 未打开

ios - 使用 [indexPath.section][indexPath.row] 的下标使用不明确

ios - managedObjectContext 不能多次使用?

swift - 如何重构 Swift API 调用以使用 Swift 5.5 async/await?

swift - Swift 中的随机值

ios - 我们可以在 Swift Playground 中添加过渡动画吗?

ios - 如何在swift项目中使用objective-c类别cocoapods

ios - Swift 中的异步 NSOperation 依赖

swift - 无法向 UITableView 中的部分添加行