Проводной синтаксис Swift generics, который на самом деле работает, но может ли он быть написан по-другому? - PullRequest
0 голосов
/ 27 ноября 2018

Итак, у меня есть эта функция:

override func sendRequest(_ pageIndex: Int) -> CSResponse<AnyObject> & CSListData {
    return server.loadUserArticles(pageIndex)
}

Она работает и вызывает целевую функцию c

- (CSResponse <CSListData> *)loadUserArticles:(NSInteger)pageIndex;

Я ищу документацию и не могу найти объяснение, CSListData является протоколом objc, и япытался написать что-то вроде этого

override func sendRequest<T : AnyObject & CSListData >(_ pageIndex: Int) -> CSResponse<T> {
        return server.loadUserArticles(pageIndex)
}

Но это, к сожалению, не компилируется с ошибкой, потому что я назначаю его свойству в объекте c с этим синтаксисом

@property(nonatomic) CSResponse <CSListData> *(^onLoadList)(NSInteger);

Ошибка:

Error:(26, 43) cannot assign value of type '(Int) -> CSResponse<_>' to type '(Int) -> CSResponse<AnyObject> & CSListData'

Что совершенно непонятно, так это почему тип возврата <AnyObject> & CSListData, когда он на самом деле CSResponse<CSListData>.Благодаря.

...