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
相关产品推荐
相关产品推荐

