【发布时间】:2020-08-16 07:47:18
【问题描述】:
我试图弄清楚何时应该使用 === 来比较 UIView。我意识到我一直在使用 == 而没有真正考虑 UIView 如何是引用类型。但它从来没有给我带来任何问题,所以 UIViews 似乎永远不需要 ===?
基于this previous question,我对值比较 == 和身份比较 === 的理解是,对于类,您需要使用 === 来了解您是否有相同的实例,并使用 == 来了解它们是否相同具有相同的价值。但是对于 UIView 类,== 似乎与 === 运算符完全一样。
let v1 = UIView()
let v2 = UIView()
XCTAssertTrue(v1 === v1)
XCTAssertTrue(v1 == v1)
XCTAssertTrue(v1.isEqual(v1))
XCTAssertFalse(v1 === v2)
XCTAssertTrue(v1 == v2)
XCTAssertTrue(v1.isEqual(v2))
基于这种理解,我希望这些都能通过。要知道 v1 和 v2 是否是不同的实例,我应该使用 ===,并且 == 应该为 true,因为它们具有相同的属性值。然而事实并非如此。
== 和 === 都是错误的。这些不应该以不同的方式工作吗?这些视图具有相同的属性值。
UIView 是否使用 === 来实现 Equatable?没有理由在 UIViews 上使用 === 吗?
【问题讨论】:
-
“UIView 是否使用 === 来实现 Equatable”我不确定,但这似乎很合理。我真的无法想象你会如何定义两个视图的相等性。
标签: ios swift uiview uikit equality