Swift:通用协议不符合

时间:2019-06-27 08:08:03

标签: swift generics

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

  

类型'MyListener'不符合协议'BaseDataListener'

如何解决? 谢谢!

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

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

2 个答案:

答案 0 :(得分:0)

如果协议未声明associatedtype,则需要为通用函数声明指定类型:

class MyModel {}
class MyListener {}

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

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

答案 1 :(得分:0)

方法1

associatedtype中创建 protocol ,而不是通过方法<T>使用通用参数 onDataLoaded(_:),即< / p>

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]) {

    }
}