0

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

XCTAssertEqual(MyStruct.self, MyStruct.self)--> 编译失败,出现错误“全局函数 'XCTAssertEqual( : :_:file:line:)' 要求 'MyStruct.Type' 符合 'Equatable'”

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

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

4

1 回答 1

3

XCTAssertEqual要求其参数符合Equatable. MyStruct.Type是一种元类型,与所有元类型一样,它不符合Equatable,因此MyStruct.self不能用作 的参数XCTAssertEqual

但是,==运算符是为所有元类型定义的。这就是您可以==在它们上使用的原因。这是此处实施的“特殊情况” 。

“可是,这不==就是要求的要求之一Equatable吗?” 你可能会说。是的,但这并不意味着==自动实现的类型符合Equatable. 反之亦然:符合的每种类型都Equatable必须实现==.

于 2020-03-18T07:27:40.847 回答