【问题标题】:Generic item getter for a Swift dictionarySwift 字典的通用项目获取器
【发布时间】:2015-12-09 13:46:06
【问题描述】:

假设我有一个 Dictionary<String, String>,我希望有一个方便的 getter 用于实现 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注释的那一行放什么呢?

【问题讨论】:

    标签: swift generics swift2.1


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 2020-09-02
      相关资源
      最近更新 更多