Ограничить универсальный метод на аргументе типа - PullRequest
0 голосов
/ 24 мая 2018

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

...