首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在键和值有特定类型的字典类型上的扩展

在键和值有特定类型的字典类型上的扩展
EN

Stack Overflow用户
提问于 2016-05-31 12:50:25
回答 1查看 1.5K关注 0票数 2

我们需要在[String:String]类型的字典中添加键值对,在该字典中,我试图添加的值可能是可选的,但我需要确保将具有值的选项的对添加到字典中,而其他选项则被简单地丢弃。

为此,我尝试在字典上创建一个扩展。

代码语言:javascript
复制
extension Dictionary {
    mutating func insert(stringOptinal optional : String?, forStringKey stringKey : String) {
        if let stringValue = optional  {
            self[stringKey as! Key] = stringValue as? Value
        }
    }
}

var dictionary = ["1":"One","2":"Two"]

var serverFetchedStringWithString : String? = "Some String From Server,That ay or may not exists"
var serverFetchedStringWithNil : String?

//Added as key value pair
dictionary.insert(stringOptinal: serverFetchedStringWithString, forStringKey: "3")
// Not added
dictionary.insert(stringOptinal: serverFetchedStringWithNil, forStringKey: "4")

print(dictionary)

var dictionaryOfIntString = [1:"One",2:"Two"]
//An obvious crash as we are trying to insert [String:String] to a dictionary of [Int,String]
dictionaryOfIntString.insert(stringOptinal: serverFetchedStringWithString, forStringKey: "3")

这对于[String:String]类型的所有字典都很好。但是当类型改变时(例如[Int:String])会崩溃。

编辑:我添加的扩展是泛型版本,它对带有可哈斯键和值的字典有效。如何确保这个扩展适用于[String: String]、ONLY类型的字典。

如何确保此扩展仅对[String:String]类型的字典有效

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-31 13:27:00

通过如下声明,可以将字典扩展限制为只应用于属于StringLiteralConvertable的键和值的工作:

代码语言:javascript
复制
extension Dictionary where Key: StringLiteralConvertible, Value: StringLiteralConvertible {
    mutating func insert(stringOptinal optional : String?, forStringKey stringKey : String) {
        if let stringValue = optional  {
            self[stringKey as! Key] = stringValue as? Value
        }
    }
}

然后,您的示例将生成编译器错误,但至少不会崩溃。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37546267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档