如何使用Swift中带有typealias的Protocol中的约束引用泛型类?

时间:2015-01-26 10:50:56

标签: swift protocols generics

我尝试定义一个协议P2,以便它返回一个带有另一个协议P1约束的泛型类,例如:

protocol P1 {}

class C<T : P1> {}

public protocol P2 {
    typealias T
    class func c() -> C<T>
}

但是这会导致以下编译器错误:

error: type 'T' does not conform to protocol 'P1'
    class func c() -> C<T>

似乎没有任何组合可以允许这种情况,例如:下一个明显的语法:

protocol P1 {}

class C<T : P1> {}

public protocol P2 {
    typealias T
    class func c() -> C<T : P1>
}

错误:

error: expected '>' to complete generic argument list
    class func c() -> C<T : P1>
                          ^
note: to match this opening '<'
    class func c() -> C<T : P1>

这可以在Swift中完成吗?

1 个答案:

答案 0 :(得分:6)

我从未使用过这样的约束,但我认为你可以在类型中定义它 - 我在游乐场尝试过它并且编译成功:

typealias T: P1