声明符合协议的typealias并且不是特定类型

时间:2016-08-03 09:29:52

标签: swift protocols

我试图在Swift中围绕typealiasassociatedtype,并且我在特定情况下挣扎。

基本上我希望有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

0 个答案:

没有答案