ios - 比较单元测试中的 swift Type 值 - XCTAssertEqual vs ==
问题描述
我试图在我的单元测试中比较 swift Type 值,并注意到 XCTAssertEqual 无法编译,而与 == 比较则可以正常编译。
XCTAssertEqual(MyStruct.self, MyStruct.self)
--> 编译失败,出现错误“全局函数 'XCTAssertEqual( : :_:file:line:)' 要求 'MyStruct.Type' 符合 'Equatable'”
XCTAssertTrue(MyStruct.self == MyStruct.self)
--> 编译正常
我想了解这两个比较之间有什么区别。
解决方案
XCTAssertEqual
要求其参数符合Equatable
. MyStruct.Type
是一种元类型,与所有元类型一样,它不符合Equatable
,因此MyStruct.self
不能用作 的参数XCTAssertEqual
。
但是,==
运算符是为所有元类型定义的。这就是您可以==
在它们上使用的原因。这是此处实施的“特殊情况” 。
“可是,这不==
就是要求的要求之一Equatable
吗?” 你可能会说。是的,但这并不意味着==
自动实现的类型符合Equatable
. 反之亦然:符合的每种类型都Equatable
必须实现==
.
推荐阅读
- excel - Excel 公式,如果单元格包含 A、B 或 C,则等于 1,2 或 3
- python - 如何获取所有h4元素
- c# - 使用角度上传数组:如何从后端获取错误?
- typescript - 如何装饰加载器方法以与加载指示器组件一起使用?(在 Vue 中)
- c# - 如何将子目录存储在列表c#中
- sql - T-SQL如何根据其他表中的列列出表中不存在的行
- python - 根据其第一个子模型的属性对查询集进行排序,返回重复的对象。姜戈,DRF
- javascript - 将 this 传递给 setTimeout 函数会导致 Uncaught TypeError: this.empty is not a function
- codeigniter - 如何在 Grocery Crud 中强制字段类型范围?
- php - 展平多维数组