在类型参数上约束泛型方法

时间:2018-05-24 11:09:19

标签: swift generics swift-protocols generic-type-argument

我想定义类似字典的结构类型,可以使用协议类型P进行参数化。键是实现P的类型的类型对象,每个值都是相应类型的实例:

struct HeterogenousDictionary<P> {
    var instances: [(P.Type, Any)] = []

    // Inheritance from non-protocol, non-class type 'E'
    subscript<T: P>(_ type: T.Type) -> T {
        get { ... }
        set { ... }
    }

    var keys: [P.Type] { ... }
}

我有一个这种字典的变体的实现,其中键不能被约束到任何协议,但在我的用例中,我希望能够约束实例可以存储在字典中的类型。属性values是此约束重要的示例,否则我必须将其类型定义为[Any]

我的问题是我找不到在下标上对类型参数T构造约束的方法。在上面的版本中,编译器抱怨我试图将T约束到不保证是协议或类类型的东西。我怎样才能满足这个要求呢?

0 个答案:

没有答案