Общий индекс с ограничениями на связанный тип приводит к «Невозможно добавить значение типа ...» - PullRequest
0 голосов
/ 12 февраля 2019

Используя Swift 4.2, я пытаюсь написать общую систему, чтобы избавиться от строк как ключей словарей, чтобы использовать вместо них перечисления.

Вот что я получил:

extension Dictionary where Key == String {
    subscript<T : RawRepresentable>(key: T) -> Value? where T.RawValue == String {
        get { return self[key.rawValue] }
        set { self[key.rawValue] = newValue }
    }
}

Это компилируется и предназначено для принятия любого типа RawRepresentable с необработанным значением String в качестве ключа к нижнему индексу для каждого Dictionary с String в качестве ключа.

К сожалению, когда я делаюниже не компилируется:

enum MovieKey: String {
    case movieId = "movie_id"
    case movies = "movies"
}

var dic = [String:String]()
dic[key: MovieKey.movieId] = "abc123" // error

Я получаю следующую ошибку компиляции: Cannot subscript a value of type '[String : String]' with an index of type '(key: MovieKey)'

За исключением случаев, если я ошибаюсь, dic - это Dictionary с String как ключ, MovieKey - RawRepresentable, а необработанное значение String напечатано ...

Если кто-то может объяснить, что я делаю неправильно, заранее спасибо.

1 Ответ

0 голосов
/ 12 февраля 2019

Проблема в том, что вы неправильно используете индекс.Вы не должны указывать какие-либо метки аргумента для вызова подстрочного индекса, просто укажите значение enum.

dic[MovieKey.movieId] = "abc123" компилируется просто отлично.

...