Дженерики - не тот путь, который отвечает вашим требованиям.Когда вы объявляете универсальную функцию в протоколе, параметр универсального типа будет означать, что одна и та же функция работает для всех типов, которые удовлетворяют ограничению универсального типа, но сигнатура функции все еще должна быть неповрежденной для всех соответствующих типов.
То, что вы ищете, это протокол с ассоциированным типом .Связанный тип в протоколе означает, что соответствующий тип может решать, какой конкретный тип использовать вместо связанного типа, что позволяет вам использовать разные связанные типы в разных соответствующих классах.
protocol MyProtocol {
associatedtype MyType: MainItem
func myFunc() -> MyType
}
class ClassA: MyProtocol {
func myFunc() -> Item1 {
return Item1()
}
}
class ClassB: MyProtocol {
func myFunc() -> Item2 {
return Item2()
}
}