我已经创建了具有通用功能的协议。当我尝试实施该协议时,出现以下错误:
类型'MyListener'不符合协议'BaseDataListener'
如何解决? 谢谢!
//the protocol
protocol BaseDataListener: class {
func onDataLoaded<T>(_ items: [T])
}
//implementation
extension MyListener: BaseDataListener {
func onDataLoaded(_ items: [MyModel]) {
//so on
}
}
答案 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]) {
}
}