比较单元测试中的 swift 类型值 - XCTAssertEqual 与 ==

Comparing swift Type values in unit tests - XCTAssertEqual vs ==

我试图在我的单元测试中比较 swift 类型值,并注意到 XCTAssertEqual 无法编译,而与 == 比较编译正常。

XCTAssertEqual(MyStruct.self, MyStruct.self) --> 编译失败 "Global function 'XCTAssertEqual(::_:file:line:)' requires that 'MyStruct.Type' conform to 'Equatable'"

XCTAssertTrue(MyStruct.self == MyStruct.self) --> 编译正常

我想了解这两个比较有什么区别。

XCTAssertEqual要求其参数符合EquatableMyStruct.Type是元类型,它和所有元类型一样,不符合Equatable,所以MyStruct.self不能作为XCTAssertEqual的参数。

但是,== 运算符是为所有元类型定义的。这就是您可以对它们使用 == 的原因。这是 "special case" 实现的 here.

"But isn't == one of the requirements of the requirements of Equatable?" 你可能会说。是的,但这并不意味着实现 == 的类型自动符合 Equatable。反之亦然:每个符合 Equatable 的类型都必须实现 ==.