我看不到我要去哪里哪里
private func check<A: Equatable, B: Equatable>(_ value: (A, B)) {
let message = String(describing: value.0) + " does not equal " + String(describing: value.1)
XCTAssert(value.0 == value.1, message)
}
错误:二进制运算符'=='不能应用于类型'A'和'B'的操作数
Xcode版本9.4.1(9F2000) 斯威夫特4.1
答案 0 :(得分:3)
Equatable
协议定义为
public protocol Equatable {
public static func == (lhs: Self, rhs: Self) -> Bool
}
,这意味着对于符合类型A
,有一个==
运算符
接受两个A
类型的操作数。换句话说,你可以
将A
类型的值与相同类型 A的另一个值进行比较–
但不一定具有不同类型B
的值(即使
即Equatable
)。
您的功能
func check<A: Equatable, B: Equatable>(_ value: (A, B))
取一个元组,其中两个成员都是相等的值–但可能 类型不同,因此编译器会抱怨该表达式
value.0 == value.1
例如,Int
和String
都符合Equatable
,因此您可以致电
check((123, "abc"))
但无法比较这些值。
您可能想要的是
func check<A: Equatable>(_ value: (A, A)) { ... }
两个元组成员都是相同等于类型A
的