Вы не предоставили реализацию по умолчанию, которая применяется:
public var rs: RealmService<Self> { ... }
Это актуально, только если CompatibleType
== Self
(тип класса, реализующего протокол). Но ваш протокол применяется ко всем возможным CompatibleType
значениям.
Тем не менее, в прошлый раз, когда я проверял, вы не можете сделать это ни в коем случае (даже если вы позаботились о том, чтобы обработать все возможные значения CompatibleType
), поскольку вы получаете циклическое определение. Реализация по умолчанию применяется только к тем вещам, которые уже соответствуют, но они не соответствуют, если у них нет реализаций. В принципе, для проверки типов можно было бы сделать шаг назад и сказать (как это делают люди): «Давайте просто притворимся, что оно соответствует, даже если это еще не так, и посмотрим, притворно ли оно соответствует на самом деле магическим образом. делает, "но я не думаю, что проверка типов делает это сегодня. (Это на самом деле довольно сложная проблема в общем случае и, вероятно, немного увеличит время компиляции, чтобы отследить все возможные способы.)
Не совсем понятно, что вы пытаетесь сделать здесь, поскольку RealmServiceCompatible
, похоже, не тянет вес. Я подозреваю, что вы пытаетесь сделать что-то вроде make SomeClass().rs
return RealmService<SomeClass>
, в то время как SomeSubClass().rs
возвращает RealmService<SomeSubClass>
, но в Swift это невозможно. RealmService<SomeSubClass>
не является подтипом RealmService<SomeClass>
, поскольку у Swift отсутствует способ выражения ковариации, поэтому это нарушит наследование.
Такое ощущение, что вы пытаетесь создать что-то волшебное, что не сработает.