gpt4 book ai didi

Swift 3.0 二元运算符 '==' 无法应用

转载 作者:可可西里 更新时间:2023-11-01 00:21:34 25 4
gpt4 key购买 nike

在 Swift 3.0 中,当我尝试比较类型为 [[String: AnyObject]][[String: AnyObject]] 的两个项目时,我遇到了一个奇怪的错误! 。所以其中一个是强制展开的,另一个不是。

所以比较看起来像:

let smth: [[String: AnyObject]] = [["key": "Value"]]
let smth2: [[String: AnyObject]]? = someFunctionThatReturnsAnOptionalArrayOfDictionaries()

if smth == smth2! {
print("Equal")
}

错误提示:二元运算符“==”不能应用于类型为“[[String : AnyObject]]”和“[[String : AnyObject]]!”的操作数

在 Swift 3 中执行此操作的正确方法是什么?

最佳答案

这有点棘手,因为您不能直接比较数组或字典(不重载运算符)。

您可能面临的另一个问题是可选和非可选比较,它已在 Swift 3 中删除(仅适用于 <>==!= 仍然有效!):

Swift Evolution - Proposal #0121

为了让它工作,我所做的是首先用 if let 解开可选的包装。然后我将它们与 elementsEqual 进行了比较,首先是数组,然后是字典。

let smth: [[String: AnyObject]] = [["key": "Value" as AnyObject]]
let smth2: [[String: AnyObject]]? = nil

if let smth2 = smth2, smth.elementsEqual(smth2, by: { (obj1, obj2) -> Bool in
return obj1.elementsEqual(obj2) { (elt1, elt2) -> Bool in
return elt1.key == elt2.key && elt1.value === elt2.value
}

}) {
print("Equal")
}

另一个问题是,因为您正在使用 AnyObject作为值(value),你不能直接比较它们。这就是为什么我使用 ===它检查比较对象的引用是否相同。不确定这是否是您想要的。

关于Swift 3.0 二元运算符 '==' 无法应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39567886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com