Как решить в быстрой (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.
Meybe Я должен использовать общие типы, чтобы иметь что-то вроде наследования в протоколах.
Тип параметра отличается между протоколами параметров –
Ну ваш 'delegate' говорит, что у него есть метод' handleSuccess' который принимает 'BaseRsp', но' Xyz' говорит, что он может * только * взять 'ChildOfBaseRsp'. Нельзя безопасно работать. 'Xyz' просто не удовлетворяет требованию' func handleSuccess (rsp: BaseRsp) '. – Hamish
Я знаю. Но как их разрешить, у меня должен быть superDelegate и что-то вроде наследования в протоколах. Является ли generic Types хорошей идеей? – luky0007