Есть ли способ определить универсальную функцию в протоколе и позволить соответствующему объекту определить специализации для этого протокола?Например:
protocol Generic {
func generic<T>(prop: T, otherProp: String)
}
class Gen: Generic {
func generic<T>(prop: T, otherProp: String) {
print("generic")
}
func generic(prop: String, otherProp: String) {
print(prop)
}
}
Теперь, если я использую класс следующим образом:
let inst = Gen()
inst.generic(prop: 1, otherProp: "Go")
inst.generic(prop: "Hello", otherProp: "Stop")
Я получу ожидаемый результат:
generic
Hello
Однако, если я объявлюinst
будет иметь тип Generic
:
let inst: Generic = Gen()
inst.generic(prop: 1, otherProp: "Go")
inst.generic(prop: "Hello", otherProp: "Stop")
Я получу:
generic
generic
Итак, если у меня есть свойство типа Generic
, я не могу использоватьспециализация обобщенной функции от разработчика протокола.Это ожидаемое поведение?Есть ли способ достичь поведения, которое я ищу, то есть использовать специализацию обобщенной функции, даже если доступ осуществляется через интерфейс протокола?Я был бы признателен за понимание этого.Спасибо всем.