Swift 词典的通用项目 getter

Generic item getter for a Swift dictionary

假设我有一个 Dictionary<String, String>,我想为其实现 StringLiteralConvertible.

的类型提供方便的吸气剂
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评论的那一行放什么?

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

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 作为参数传递