Как решить в 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)
. - person Hamish   schedule 06.02.2017