Как создать пользовательский индекс коллекции, который обрабатывает значение RawRepresentable - PullRequest
0 голосов
/ 24 сентября 2019

Я создаю пользовательскую коллекцию, которая упаковывает словарь.Эта коллекция должна определять, когда она получает перечисление, которое имеет необработанное значение типа: string / int, и если это так, то оно автоматически извлечет из него «rawValue».

Один из моих подписчиков должен обрабатывать регистр, в котором ключ этого индекса имеет тип String, а значение равно Enum, например:

dict["userEvent"] = Event.tap

Я пытался:

subscript<Index: ExpressibleByStringLiteral>(index: Index) -> Value? where Value == RawRepresentable {
    get {
        return self.elements[index as! Key]
    }
    set {
        self.elements[index as! Key] = newValue?.rawValue
    }
}

Но у меня возникают следующие ошибки:

Протокол 'RawRepresentable' может использоваться только в качестве общего ограничения, поскольку он имеет требования к Self или связанные с типами

и

Элемент 'rawValue' нельзя использовать со значением типа протокола 'RawRepresentable';вместо этого используйте общее ограничение

Как я могу реализовать этот индекс, который автоматически развернет регистр перечисления при установке нового значения?

1 Ответ

0 голосов
/ 24 сентября 2019

RawRepresentable имеет общие ограничения.Что вы можете сделать, это добавить тип «Возврат» в качестве другого параметра в общих ограничениях для вашего индекса.Например:

subscript<Index: ExpressibleByStringLiteral, Return: RawRepresentable>(index: Index) -> Return?

Но я не уверен, что этот тип конфигурации будет работать.Является ли эта оболочка словаря отдельным подклассом Dictionary или расширением Dictionary?

...