【发布时间】:2017-06-23 08:17:02
【问题描述】:
如何在 swift (2.0) 中解决这种情况:我们有两个协议:
protocol SuperDelegate{
func handleSuccess(rsp: BaseRsp)
}
protocol ChildOfSuperDelegate: SuperDelegate {
func handleSuccess(rsp: ChildOfBaseRsp)
}
以及我们想要做的代码中的某个地方:
class A{
var delegate:SuperDelegate?
func foo(){
delegate?.handleSuccess(childOfBaseRspObj)
}
}
class Xyz:ChildOfSuperDelegate{
func handleSuccess(rsp: ChildOfBaseRsp){
print("Great!")
}
}
但是编译器没有在协议中建立继承(handleSuccess 具有基参数和子参数的功能)存在编译错误:
Type 'Xyz' does not conform to protocol 'SuperDelegate'
。如何解决它们?仅实现 ChildOfSuperDelegate 方法但类“A”使用 SuperDelegate 变量的最佳方法是什么。
我必须使用泛型类型才能在协议中进行一些继承。
【问题讨论】:
-
协议参数的参数类型不同
-
你的
delegate说它有一个方法handleSuccess接受BaseRsp,但是Xyz说它只能 接受ChildOfBaseRsp.这不可能安全地工作。Xyz根本不满足func handleSuccess(rsp: BaseRsp)的要求。 -
我知道。但是怎么解决呢,我肯定有superDelegate,还有一些想像协议中的继承,泛型Types是不是个好主意?
-
使类型相同。
-
我怀疑你是否使用了一个好的方法。我认为在这种情况下最好使用协议扩展,以避免继承并获得类似“抽象类”的行为。这里提到:stackoverflow.com/questions/24110396/…
标签: swift swift-protocols