You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UITextField中==与===的对比:为何两者表现一致?

UITextField的Equatable实现与==比较逻辑解析

问题背景

有两个UITextField实例,原本使用===检查引用一致性,误写为==后结果和===完全一致。想明确UITextField是否遵循Equatable协议,以及==的具体比较逻辑。

示例代码与输出

测试代码

let textFieldA = UITextField()
let textFieldB = UITextField()

textFieldA.text = "A"
textFieldB.text = "B"

print("A.text", textFieldA.text)
print("B.text", textFieldB.text)
print("A == A:", textFieldA == textFieldA)
print("A == B:", textFieldA == textFieldB)
print("A === B:", textFieldA === textFieldB)

textFieldB.text = "A"

print("A.text", textFieldA.text)
print("B.text", textFieldB.text)
print("A == A:", textFieldA == textFieldA)
print("A == B:", textFieldA == textFieldB)
print("A === B:", textFieldA === textFieldB)

输出结果

A.text Optional("A")
B.text Optional("B")
A == A: true
A == B: false
A === B: false
A.text Optional("A")
B.text Optional("A")
A == A: true
A == B: false
A === B: false

底层实现原理

  • UITextField继承自UIView,而UIView是NSObject的子类。在Swift中,所有NSObject的子类都会自动获得Equatable协议的默认实现。
  • 这个默认实现的核心是调用NSObject的isEqual(_:)方法,而NSObject的isEqual(_:)默认逻辑就是比较对象的内存地址(引用一致性),和===的行为完全相同。
  • UITextField并没有重写isEqual(_:)方法,因此它的==比较不会去检查text、frame等属性是否相等,只会判断两个实例是否为同一个对象。
  • 这就解释了为什么示例中即使两个UITextField的text属性相同,==依然返回false——因为它们是两个不同的实例,内存地址不一样。

内容的提问来源于stack exchange,提问作者Heuristic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:43:11