Это моя структура наследованияOverride вар в соответствии с протоколом с вар в соответствии с ребенком переопределенном протокола вар
Протоколы
protocol BaseProtocol {
}
protocol ChildProtocol: BaseProtocol {
}
Классы
class BaseClass: NSObject {
var myVar: BaseProtocol!
}
class ChildClass: BaseClass {
override var myVar: ChildProtocol!
}
Я получаю ошибку компилятора:
Property 'myVar' with type 'ChildProtocol!' cannot override a property with type 'BaseProtocol!'
Каков наилучший подход для достижения этого?
UPDATE
Я обновил этот вопрос, пытаясь реализовать решение с дженериков, но это не работает :(Это мой код (теперь настоящий, без примеров)
Протоколы
protocol TPLPileInteractorOutput {
}
protocol TPLAddInteractorOutput: TPLPileInteractorOutput {
func errorReceived(error: String)
}
Классы
class TPLPileInteractor<T: TPLPileInteractorOutput>: NSObject, TPLPileInteractorInput {
var output: T!
}
И мои дети
class TPLAddInteractor<T: TPLAddInteractorOutput>: TPLPileInteractor<TPLPileInteractorOutput>, TPLAddInteractorInput {
}
Ну, в моем TPLAddInteractor
я не могу получить доступ к self.output
, он выдает ошибку компиляции, например
'TPLPileInteractorOutput' does not have a member named 'errorReceived'
Кроме того, когда я создаю экземпляр от TPLAddInteractor
let addInteractor: TPLAddInteractor<TPLAddInteractorOutput> = TPLAddInteractor()
Я принимаю эту другую ошибку
Generic parameter 'T' cannot be bound to [email protected] protocol type 'TPLAddInteractorOutput'
Любые мысли?
[Это может быть полезным] (http://stackoverflow.com/questions/24094158/overriding-superclass-property-with-different-type-in-swift) и [Это] (Http: // StackOverflow.com/questions/26188903/swift-override-class-variables) –
Спасибо @UmangBista, но принятое решение для меня не работает, компилятор говорит, что я не могу сделать нисходящий тип от другого типа. – emenegro