我试图在Swift中围绕typealias
和associatedtype
,并且我在特定情况下挣扎。
基本上我希望有protocol
定义一个方法,该方法接受符合protocol
的参数以及符合protocol
的所有其他protocol
(有点混乱,是的,我知道)。但基本上我只想允许多层一致性。
所以,这是我能得到的最接近的(编译):
protocol Bar {}
protocol BarVariant: Bar {}
struct BarVariantImpl: BarVariant {}
protocol Foo {
associatedtype T: Bar
func update(bar: T)
}
struct FooImpl: Foo {
typealias T = BarVariantImpl
func update(bar: T) {}
}
FooImpl().update(BarVariantImpl())
上述代码的问题在于typealias T = BarVariantImpl
将参数类型固定为具体实现。我想允许符合BarVariant
的参数。我的第一个想法是改为typealias T: BarVariant
,但这不会编译。
我正在运行Swift 2.2.1
。