Как насчет
protocol TestProtocol {
associatedtype T: Equatable
}
struct TestProtocolContainer<U: Equatable>: TestProtocol {
typealias T = U
}
struct Test {
let value: TestProtocolContainer<Int>
}
Когда вы объявляете протокол с associatedtype
(который предлагает статический c полиморфизм, если вы заинтересованы в понимании различных типов полиморфизма и как его достичь с помощью протокола в swift, прочтите мой блог здесь).
вы не можете использовать этот протокол как конкретный тип, потому что компилятор не может разрешить тип T
во время компиляции. (Почему во время компиляции я сказал, что его статический c полиморфизм помните :))
Вот почему компилятор ожидает, что вы предоставите его каким-то образом, чтобы помочь ему разрешить тип associatedtype
во время компиляции. Один из способов - предоставить typealias
и указать фактический тип данных associatedtype
.
пример:
struct TestProtocolContainer: TestProtocol {
typealias T = Int
}
Это отлично работает, но тогда вы захотите сделать этот Generi c структура для представления любой структуры с типом Equatable
. Вот где на помощь приходят Generics.
struct TestProtocolContainer<U: Equatable>: TestProtocol {
Это представляет структуру Generi c, которая использует любой тип Equatable
и подтверждает TestProtocol
и, наконец, устанавливает
typealias T = U
Обеспечивает подтверждение на TestProtocol
Надеюсь, это поможет