我们需要在类型[String:String]
的字典中添加键值对,其中我尝试添加的值可能是可选的,但我需要确保与具有值的选项对被添加到字典中,而其他的则被简单地丢弃。字典类型的扩展,其中键和值具有特定类型
我试图在字典上为此创建扩展。
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]
)。
编辑:我已经添加的扩展是通用版本,它适用于带有Hashable键和值的字典。如何确保此扩展程序适用于[String: String]
类型的字典仅限于。
如何确保此扩展程序仅对类型为[String:String]
的字典有效?
@ Daij-Djan编辑!希望它现在更有意义 – BangOperator
@ Daij-Djan。好吧,为了更具体,让我们忘记扩展中编写的方法。问题是如何在一个专门针对给定类型的泛型上创建和扩展。像数组可以采用任何通用元素,我怎么才能在这个数组上创建一个扩展,它只适用于仅包含字符串元素的数组? – BangOperator
与第二次编辑它是有道理的 –