Я хотел бы определить словарный тип структуры, который может быть параметризован с типом протокола 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
чем-то, что не гарантированно относится к типу протокола или класса.Как я могу удовлетворить это требование?