Следующий код:Как использовать протокол с typealias как параметр func?
protocol ProtocolA {
}
protocol ProtocolB {
typealias T: ProtocolA
var value : Array<T> { get set }
}
class ProtocolC {
func method<T: ProtocolA>(value: ProtocolB<T>)
{
}
}
Урожайность эти ошибки:
error: cannot specialize non-generic type 'ProtocolB'
func method<T: ProtocolA>(value: ProtocolB<T>)
error: generic parameter 'T' is not used in function signature
func method<T: ProtocolA>(value: ProtocolB<T>)
error: protocol 'ProtocolB' can only be used as a generic constraint because it has Self or associated type requirements
func method<T: ProtocolA>(value: ProtocolB<T>)
Может кто-нибудь объяснить мне, почему это не возможно? Это ошибка или умышленное?
Что вы пытаетесь сделать с помощью 'method'? –
Допустим, у меня разные реализации ProtocolA и ProtocolB для разных аппаратных устройств. Тогда метод должен выполнить на нем некоторый алгоритм. Теперь я не могу использовать подклассы, поскольку конкретные реализации уже должны подклассифицировать другой класс, который не должен быть раскрыт. – V1ru8
Я могу на самом деле обойти это, тем более, что я хотел бы понять, почему это невозможно, поскольку он выглядит как допустимый пример использования генериков. – V1ru8