上下文类型不能与字典文字一起使用

时间:2018-04-06 23:32:03

标签: arrays swift swift4

我有一个字典数组,只想检查数组是否包含某个值。但是,我收到此错误消息:

  

上下文类型'([Double:Double])抛出 - >布尔'不能与字典文字一起使用

代码:

if stored.contains(where: ([YAngle : ZAngle])) { // Error on this line
    print("This data is already stored")
}

我做错了什么?

2 个答案:

答案 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")
}