Swift字典的通用项getter

时间:2015-12-09 13:46:06

标签: swift generics swift2.1

假设我有一个Dictionary<String, String>我希望为实现StringLiteralConvertible的类型提供方便的getter。

let items = ["Key 1": "Value 1", "Key 2": "Value 2"]

func get<T: StringLiteralConvertible>(key: String, _ defaultValue: T) -> T {
    if let value = items[key] {
        return T(stringLiteral: value)  // BUG
    }

    return defaultValue
}

但是在标有BUG评论的行上放什么?

1 个答案:

答案 0 :(得分:4)

该行实际上是正确的,但上面的行应该更具体地说明将是什么类型的值。尝试:

func get<T: StringLiteralConvertible>(key: String, _ defaultValue: T) -> T {
    if let value = items[key] as? T.StringLiteralType {
        return T(stringLiteral: value)
    }

    return defaultValue
}

PS:您可能还希望将items作为参数传递