У меня есть быстрый код:Swift наследования протокол
import Foundation
protocol ParentProtocol {
//stuff
}
protocol ChildProtocol:ParentProtocol {
//additional stuff
}
protocol FooProtocol {
var variable:ParentProtocol? { get }
}
class Foo:FooProtocol {
var variable:ChildProtocol?
}
Я получил сообщение об ошибке компилятора: Type 'Foo' does not conform to protocol 'FooProtocol'
Я знаю, что в соответствии с FooProtocol
, тип переменной должен быть ParentProtocol
типа. С другой стороны, ChildProtocol
наследует от ParentProtocol
, поэтому он также является ParentProtocol
Есть ли какое-либо решение для использования наследования протокола таким образом?
@ShadowOf Угу, спасибо. Решение со связанными типами работает так, как ожидалось: http://stackoverflow.com/a/38008288/824285 – somedev
Связанный: [Как я могу создать функцию с типом возврата подкласса, совместимым с протоколом, где Superclass определяется как тип возврата ?] (http://stackoverflow.com/questions/35094967/swift-how-can-i-make-a-function-with-a-subclass-return-type-conform-to-a-protoc) – Hamish
Также связанные (соответствие и наследование метатипов): [Протокол не соответствует самому себе?] (http://stackoverflow.com/questions/33112559/protocol-doesnt-conform-to-itself), цитируя комментарий MartinR: s, _ " Даже с 'протоколом P: Q {}', 'P' не соответствует' Q'' _. – dfri