代码之家  ›  专栏  ›  技术社区  ›  Renetik

Swift泛型结合了实际工作的语法,但它可以用不同的方式编写吗?

  •  0
  • Renetik  · 技术社区  · 6 年前

    所以我有这个功能:

    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)
    }
    

    但遗憾的是,编译时并没有出现错误,因为我正在用这种语法将它赋给objective 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> . 谢谢。

    0 回复  |  直到 6 年前