关联类型受约束的泛型下标导致“无法为类型的值下标...”

时间:2019-02-12 11:02:26

标签: swift dictionary generics associated-types

使用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,而MovieKeyRawRepresentable,原始值为{{ 1}}输入了...

如果有人可以解释我在做什么错,请先谢谢。

1 个答案:

答案 0 :(得分:1)

问题是您没有正确使用下标。您不应该为下标调用提供任何参数标签,只需提供enum值即可。

dic[MovieKey.movieId] = "abc123"可以正常编译。