Swift 如何比较可选词典?斯威夫特3

Swift 如何比较可选词典?斯威夫特3,swift,dictionary,compare,optional,Swift,Dictionary,Compare,Optional,在Swift中,我们可以比较可选字典,也可以比较字典,但是如何比较可选字典呢 var dict: [String: String]? = [ "name" : "A name", "email" : "an@email.com" ] var dict2 = [ "name" : "A name", "email" : "an@email.com" ] if dict2 == dict { // Error line: Value of optional t

在Swift中,我们可以比较可选字典,也可以比较字典,但是如何比较可选字典呢

var dict: [String: String]? = [
    "name" : "A name",
    "email" : "an@email.com"
]
var dict2 = [
    "name" : "A name",
    "email" : "an@email.com"
]


if dict2 == dict {   // Error line: Value of optional type '[String : String]?' not unwrapped; did you mean to use '!' or '?'?

}

这无法编译,迫使我们打开字典。有没有干净的解决方案?

打开字典实例,然后尝试比较

如果让阻塞

let dict: [String: String]? = [
   "name" : "A name",
   "email" : "an@email.com"
]

let dict2 = [
   "name" : "A name",
   "email" : "an@email.com"
]

// use if-let 
if let dict1 = dict, dict2 == dict1 {
   print("true")    // result is "true"
} else {
   print("false")
}
字典“name”的更新值

let dict3 = [
   "name" : "B name",
   "email" : "an@email.com"
]

// use if-let 
if let dict1 = dict, dict3 == dict1 {
   print("true")  
} else {
   print("false")  // result is "false"
}

dict2==dict
是一个逻辑计算,而不是一个赋值。。。而
dict
是一个未包装的可选选项,而
dict2
最初已包装。。。那么,您到底想在这里做什么呢?本质上与中的问题相同–只针对字典而不是数组。最干净的解决方案是将此数据表示为结构。在这里使用字典有什么特别的原因吗?比较这两个可选字典对我来说不是问题,但我很感兴趣为什么swift 3不支持它。我可能没有正确地表达我的问题。答案就在@MartinR在对我的问题的评论中给出的链接中:。我会接受你的回答,因为你愿意帮助一个程序员同伴!