簡體   English   中英

無法將返回表達式類型轉換為帶閉包的返回類型?

[英]Cannot convert return expression type to return type with closure?

您好,我有一些分頁消息功能。

   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 (/ empty tuple type () )返回類型。 即, list(...)的完整簽名為

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

當您嘗試返回list作為listMessages(...)的返回值時,導致類型不匹配。

在不知道代碼用途的情況下,很難給出任何具體建議,但是您可以通過修改listMessages(...)的返回類型以包括()返回類型來解決上述問題,從而匹配list(...)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM