swift - 无法将返回表达式类型转换为带有闭包的返回类型?

标签 swift closures

你好,我有一些分页消息的功能。

   class func listMessages() -> (Int, Int, ([ChatItemProtocol]) -> Void) {
    let service = MessageService()
    func list(count: Int, offset: Int, comp:([ChatItemProtocol]) -> Void) {
        let params : [String : AnyObject] = ["offset" : offset, "limit" : count]
        service.listMessagesForRoom(params) { (messages) in
            comp(messages.map({$0}))
        }
    }
    return list
}

我有一些错误:

Cannot convert return expression of type '(Int, offset: Int, comp: ([ChatItemProtocol]) -> Void) -> ()' to return type '(Int, Int, ([ChatItemProtocol]) -> Void)' (aka '(Int, Int, Array<ChatItemProtocol> -> ())')

最佳答案

listMessages(...) 需要以下元组返回类型

(Int, Int, ([ChatItemProtocol]) -> Void)

函数list(...),另一方面,使用上面的参数作为参数,但也隐式包含一个Void(/空元组类型()) 返回类型。即,list(...) 的完整签名是

(Int, Int, ([ChatItemProtocol]) -> Void) -> ()

当您尝试返回 list 作为 listMessages(...) 的返回值时,会导致类型不匹配。

在不知道代码的目的的情况下,很难给出任何具体的建议,但是您可以通过修改 listMessages(...) 的返回类型以包含 () 返回类型,因此与 list(...)

的签名匹配
class func listMessages() -> ((Int, Int, ([ChatItemProtocol]) -> Void) -> ())

关于swift - 无法将返回表达式类型转换为带有闭包的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38223444/

相关文章:

javascript - 在带有 Javascript 闭包的回调函数中,如何访问全局变量

Javascript 闭包与 Object.createProperty

json - 设置或覆盖通用编码对象的属性

ios - 如何使用 FCM 为富文本通知创建有效负载

Ruby 闭包 : How to return args and block as a single argument to pass to a method

javascript - Javascript 闭包总是保留作用域变量吗?

Javascript Typedef 使用参数时出错

swift - Swift 2.1 中的字节数据类型

swift - 如何以编程方式截取屏幕截图(Swift、SpriteKit)

ios - 为 iOS 设计矩形按钮的指南