我已经创建了具有通用功能的协议。当我尝试实现该协议时,出现以下错误:


  类型“ MyListener”不符合协议“ BaseDataListener”


如何解决?
谢谢!

//the protocol
protocol BaseDataListener: class {
    func onDataLoaded<T>(_ items: [T])
}

//implementation
extension MyListener: BaseDataListener {
    func onDataLoaded(_ items: [MyModel]) {
        //so on
    }
}

最佳答案

方法1

associatedtype中创建protocol而不是将通用参数<T>与方法onDataLoaded(_:)一起使用,即

protocol BaseDataListener: class {
    associatedtype T
    func onDataLoaded(_ items: [T])
}

extension MyListener: BaseDataListener {
    func onDataLoaded(_ items: [MyModel]) {

    }
}


方法2

如果您只想将通用参数<T>与方法onDataLoaded(_:)关联,请使用

extension MyListener: BaseDataListener {
    func onDataLoaded<MyModel>(_ items: [MyModel]) {

    }
}

10-07 23:55