2016-07-06 5 views
0

Привет, у меня есть функция func для сообщений с разбивкой по страницам.Невозможно преобразовать тип выражения возврата в тип возврата с закрытием?

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

listMessages(...) ожидает следующий тип возвращения кортеж

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

Функция list(...), с другой стороны, использует выше в качестве аргумента, но будет неявно также содержат Void (/ пустой тип кортежа ()). Т.е., полная сигнатура для list(...) является

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

приводит к неправильному типа матча, когда вы пытаетесь вернуть list в качестве возвращаемого значения listMessages(...).

Не зная цель вашего кода, то трудно давать какие-либо конкретные советы, но вы могли бы исправить выше, изменив тип возвращаемого listMessages(...) включает также тип () возврата, в так соответствие подписи list(...)

+0

Хорошо, я использую библиотеку Chatto для чата, есть имя класса SlidindDataSource, которое тестирует приложение в репозитории chatto в github и использует для разбивки на страницы в чате. Он работает с тестовыми данными, но я хочу загружать сообщения с сервера. Поэтому я пытаюсь написать свой собственный генератор сообщений, который будет запускаться асинхронно. Спасибо за помощь. Это класс, в котором генерируются тестовые сообщения [chatto] (https://github.com/badoo/Chatto/blob/master/ChattoApp/ChattoApp/SlidingDatasSource.swift) – nickheck

+0

@nickheck это выходит за рамки вашего вопроса и звучит как вопрос дизайна, а не синтаксис. Возможно, рассмотрим вопрос о том, как достичь (конструктивно) этого. Обязательно включите все необходимые детали в сам вопрос, а не по ссылкам (при этом сохраняя информацию несколько минимально). – dfri

Смежные вопросы