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

时间:2016-07-06 11:58:32

标签: 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> -> ())')

1 个答案:

答案 0 :(得分:1)

listMessages(...)期望以下元组返回类型

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

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

(Int, Int, ([ChatItemProtocol]) -> Void) -> ()
当您尝试将list作为listMessages(...)的返回值返回时,

会导致类型不匹配。

在不知道代码的目的的情况下,很难给出任何具体的建议,但您可以通过修改listMessages(...)的返回类型以包含()返回类型来解决上述问题。所以匹配list(...)

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