У меня есть протокол P, который возвращает копию объекта:
protocol P {
func copy() -> Self
}
и класс C, который реализует P:
class C : P {
func copy() -> Self {
return C()
}
}
Однако, если я верну свое значение как Self
я получаю следующую ошибку:
Невозможно преобразовать возвращаемое выражение типа 'C', чтобы вернуть тип 'Self'
Я также попробовал вернуть C
class C : P {
func copy() -> C {
return C()
}
}
Это привело к следующей ошибке:
Метод 'copy()' в непределом классе 'C' должен возвращать
Self
для соответствия протоколу 'P'
Ничего не работает, кроме случая, когда я префикс class C
final
то есть:
final class C : P {
func copy() -> C {
return C()
}
}
Однако, если я хочу подкласс C, тогда ничего не получится. Есть ли способ обойти это?