我們需要在類型[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
與第二次編輯它是有道理的 –