У меня есть протокол, который я создал (в Swift 4.2), и одно из его требований - это свойство того же типа, что и сам протокол.
Например, у меня есть протокол, определенный так:
protocol A {
var a: A? { get set }
}
У меня есть несколько моделей, которые соответствуют этому протоколу:
class Model1: A {
var a: A?
}
class Model2: A {
var a: A?
}
Для одной из моих моделей мне нужно удовлетворить требования протокола, более точно указав свойство, определенное переменной a
(т.е. переменная с типом протокола). Так, например, я могу захотеть реализовать Model2
как:
class Model2: A {
var a: Model1?
}
В этом случае, поскольку Model1
соответствует протоколу A
, можно ожидать, что он сможет удовлетворить требования протокола, однако вместо этого я получаю сообщение об ошибке:
Тип «Модель2» не соответствует протоколу «А»
Почему это происходит, и что я могу сделать, чтобы это работало, как описано выше?
Приложение
Я смоделировал вышеупомянутый сценарий в Игровой площадке XCode, и вот скриншот ошибки, которую я вижу.