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

如何为Swift自定义类实现基于指定属性的Equatable协议?

基于单个属性实现Swift类的Equatable协议

对于Swift中的引用类型(class),默认的相等判断是比较实例的引用地址,如果需要根据特定属性(比如这里的id)来判断值相等,需要手动遵循Equatable协议并实现自定义的==运算符,具体步骤如下:

1. 让类遵循Equatable协议

在CustomObject的类声明后添加: Equatable,表明该类支持自定义相等判断。

2. 实现==运算符

在类内部定义静态的==运算符方法,仅比较两个实例的id属性即可覆盖默认的引用相等逻辑。

完整代码示例:

class CustomObject: Equatable {
    let id: Int
    let name: String

    init(id: Int, name: String) {
        self.id = id
        self.name = name
    }

    static func == (lhs: CustomObject, rhs: CustomObject) -> Bool {
        // 仅依据id判断实例相等
        return lhs.id == rhs.id
    }
}

验证逻辑

你可以用以下代码测试是否符合预期:

let obj1 = CustomObject(id: 1, name: "Alice")
let obj2 = CustomObject(id: 1, name: "Bob")
let obj3 = CustomObject(id: 2, name: "Alice")

print(obj1 == obj2) // 输出 true,id相同即视为相等
print(obj1 == obj3) // 输出 false,id不同则不相等

额外说明

  • 如果后续给CustomObject添加子类,若子类需要扩展相等判断逻辑,需在子类中重写==运算符;否则会直接沿用父类仅比较id的规则。
  • 由于id是不可变的let属性,这个相等判断逻辑是稳定的,不会因属性修改导致结果变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:58:14