在Dictionary扩展中引用self

时间:2015-02-28 04:59:47

标签: swift

我试图扩展词典但不能用键引用自己。我很困惑为什么会这样。

extension Dictionary {
    func foo() {
        var result = self["key"]
    }
}

我收到此错误: 输入' DictionaryIndex'不符合协议' StringLiteralConvertible'

如果有人有任何见解,我们将不胜感激。

1 个答案:

答案 0 :(得分:10)

DictionaryGeneric结构。它在KeyValue上是通用的。 因此,在您的扩展中,您必须使用Key作为字典键的类型,并使用Value作为字典值的类型。

编译器抱怨,因为你使用了错误的字典键扩展名。

以下是一个例子:

extension Dictionary {
    func ext(key: Key) {
        if let value = self[key] {
            // use your value
            println("Key is present")
        } else {
            println("No value for key")
        }
    }
}

let dic = ["A": 20]
dic.ext("A")
dic.ext("B")

以下是你可以做类似事情的方法......这可能会让你的测试更加清晰:

extension Dictionary {
    var foo: String? {
        if let key = "key" as? Key {
            return self[key] as? String
        }
        return nil
    }
}
let dic1 = ["A": "an A", "key": "the value"]
dic1.foo // "the value" as optional
dic.foo  // nil since dic value type is Int

由于Dictionary是一个通用结构,您可能会重新考虑扩展它,就像它是一个特定的具体类型一样。