Используя 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
напечатано ...
Если кто-то может объяснить, что я делаю неправильно, заранее спасибо.