Swift 无法应用受可等式二进制运算符约束的函数参数

Swift 无法应用受可等式二进制运算符约束的函数参数,swift,generics,Swift,Generics,我看不出哪里出了问题 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) } 私有函数检查(u值:(A,B)){ 让消息=字符

我看不出哪里出了问题

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)
}
私有函数检查(u值:(A,B)){
让消息=字符串(描述:value.0)+“不等于”+字符串(描述:value.1)
xctasert(值.0==值.1,消息)
}
错误:二进制运算符“==”不能应用于“A”和“B”类型的操作数

Xcode版本9.4.1(9F2000)
Swift 4.1

平等协议定义如下:

public protocol Equatable {
    public static func == (lhs: Self, rhs: Self) -> Bool
}
这意味着对于一致性类型
a
有一个
=
运算符 取两个
A
类型的操作数。换句话说,你可以 将
a类型的值与相同类型a的另一个值进行比较——
但不一定使用不同类型的值
B
(即使 也就是说,
equalable

你的职能

func check<A: Equatable, B: Equatable>(_ value: (A, B))
例如,
Int
String
都符合
equalable
,因此您可以调用

check((123, "abc"))
但这些价值无法比较

你可能想要的是

func check<A: Equatable>(_ value: (A, A)) { ... }
func检查(uvalue:(A,A)){…}

如果两个元组成员都是相同的equalable类型
A

equalable
协议定义为

public protocol Equatable {
    public static func == (lhs: Self, rhs: Self) -> Bool
}
这意味着对于一致性类型
a
有一个
=
运算符 取两个
A
类型的操作数。换句话说,你可以 将
a类型的值与相同类型a的另一个值进行比较——
但不一定使用不同类型的值
B
(即使 也就是说,
equalable

你的职能

func check<A: Equatable, B: Equatable>(_ value: (A, B))
例如,
Int
String
都符合
equalable
,因此您可以调用

check((123, "abc"))
但这些价值无法比较

你可能想要的是

func check<A: Equatable>(_ value: (A, A)) { ... }
func检查(uvalue:(A,A)){…}
其中两个元组成员属于相同的可等分类型
A