我想定义类似字典的结构类型,可以使用协议类型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
约束到不保证是协议或类类型的东西。我怎样才能满足这个要求呢?