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

SwiftData中自定义CollectionData类相等判断返回false的问题求助

问题原因

你让CollectionData遵循了Equatable协议,但没有自定义==运算符,Swift会自动合成Equatable的实现——这个合成实现会比较所有存储属性,包括你声明的id。每次创建CollectionData实例时,id都会生成一个全新的UUID,所以哪怕两个实例的name和data完全一致,只要id不同,比较结果就是false。

解决方案

自定义==运算符,只把name和data作为相等判断的依据,忽略自动生成的id:

@Model
final class CollectionData: Equatable {
    var name: String
    var data: [Quote]
    var id: UUID = UUID()
    
    init(data: [Quote], name: String) {
        self.data = data
        self.name = name
    }
    
    // 自定义相等判断逻辑
    static func == (lhs: CollectionData, rhs: CollectionData) -> Bool {
        lhs.name == rhs.name && lhs.data == rhs.data
    }
}
额外注意

如果Quote也是SwiftData的@Model类,同样需要确保它正确实现了Equatable(自定义==运算符,忽略自身的唯一标识属性),否则[Quote]数组的比较会因为实例UUID不同而返回false,导致CollectionData的比较依然不符合预期。

内容的提问来源于stack exchange,提问作者Kitten Apps-Films

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:40:08