我有一个字典数组,只想检查数组是否包含某个值。但是,我收到此错误消息:
上下文类型'([Double:Double])抛出 - >布尔'不能与字典文字一起使用
代码:
if stored.contains(where: ([YAngle : ZAngle])) { // Error on this line
print("This data is already stored")
}
我做错了什么?
答案 0 :(得分:0)
您对contains(where :)的使用不正确。这是使用该函数的一个示例,它不会导致编译器错误:
if stored.contains(where: { (key, value) -> Bool in
return true
}) {
// no op
}
您可能想要检查字典是否包含键值对只是:
if stored[YAngle] == ZAngle {
print("This data is already stored")
}
答案 1 :(得分:-1)
contains(where:)
以函数作为参数。当数组的元素类型不符合Equatable
协议或者需要在检查中执行其他逻辑时,可以使用它。有两种方法可以做到这一点:
[Double:Double]
符合Equatable
,因此您只需进行简单比较即可使用contains(_:)
(即只删除where:
):
if stored.contains([YAngle : ZAngle]) {
print("This data is already stored")
}
如果您正在进行更复杂的检查,或者您的类型不符合Equatable
,则会传入函数:
if stored.contains(where: { dict in
// Here you would do your logic and return a boolean based on the result.
// If you really wanted to do it this way with your current data
// you could do this:
return dict == [YAngle:ZAngle]
}) {
print("This data is already stored")
}