Swift-二进制运算符==不能应用于两个[[double]操作数



我写了这样的litle swift函数:

func compareTest(values: [[Double]]) {
    if(values == [[1.0,2.0]]) {
         // some code   
    }
}

但是,当我尝试编译时,我会在比较时出现错误:

二进制运算符==不能应用于两个[[double]操作数。

我在这里搜索了问题。大多数答案是错误消息具有误导性,人们正在使用错误的类型(示例问题)。

有人可以帮我我写的类型不正确吗?

在这种情况下,没有任何误导。

通常为Equatable项目定义了==操作员。这允许将两个Double值相互比较,例如1.0 == 1.0

然后,我们有一个在Equatable项目数组上定义的特定==操作员:

public func ==<Element : Equatable>(lhs: [Element], rhs: [Element]) -> Bool

这意味着您可以将任何数组与平等项目进行比较。但是,数组本身不是 Equatable

没有为嵌套数组定义的操作员。

您必须定义:

public func ==<Element : Equatable>(lhs: [[Element]], rhs: [[Element]]) -> Bool {
   ...
}

我不熟悉Swift,但作为任何语言的一般规则,不应使用平等操作员比较双重值。相反,如果它们的绝对算术差异小于Epsilon

,则应将两个双重值视为相等
var epsilon = 0.00000001;
if(fabs(v1-v2)< epsilon){ // values are considered equal
}

最新更新