如何比较可选字典?Swift 3

3

在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 '?'?

}

这段代码无法编译,需要我们强制解包字典。是否有更好的解决方法?

dict2 == dict 是一个逻辑判断而不是值的赋值... 而 dict 是一个未包装的可选项,而 dict2 最初被包装了... 所以你实际上想在这里做什么? - holex
3
基本上与为什么可选数组没有定义Equatable相同问题,只是针对字典而不是数组。 - Martin R
1
最干净的解决方案是将这些数据表示为结构体。在这里使用字典的特定原因是什么? - XmasRights
1个回答

1
请先解包您的字典实例,然后尝试进行比较。
使用if-let
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"
}

对我来说,比较两个可选字典并不是问题,但我更感兴趣的是为什么Swift 3不支持它。我可能没有正确表达我的问题。答案在@MartinR在评论中给出的链接中:[link](https://dev59.com/blwX5IYBdhLWcg3w6S8h)。尽管如此,由于您愿意帮助其他程序员,我将接受您的答案为正确答案! - Vodenjak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接