Swift使用Alamofire时检查对象是否存在:无法比较Cidades实例
解决Swift中自定义类型无法用
==比较的问题 你遇到的这个错误,本质是因为自定义的Cidades类型没有遵守Equatable协议——Swift默认不知道怎么判断两个自定义类/结构体实例是否相等,所以直接用==会报错。下面给你两种针对性的解决方案:
方案1:如果Cidades是结构体(推荐)
Swift对结构体有自动合成Equatable实现的特性,只要结构体里所有存储属性都遵守Equatable(比如Int、String这些基础类型都默认支持),你只需要让结构体声明遵守Equatable就行:
struct Cidades: Equatable { // 你的属性示例,根据实际情况调整 let id: Int let nome: String let estado: String }
这样Swift会自动帮你生成==方法,默认会比较所有属性是否完全一致。
方案2:如果Cidades是类
类不会自动合成Equatable实现,需要你手动实现协议的==方法,定义“两个实例相等”的规则(通常用唯一标识比如id来判断,也可以比较所有属性):
class Cidades: Equatable { let id: Int let nome: String // 你的初始化方法 init(id: Int, nome: String) { self.id = id self.nome = nome } // 实现Equatable协议的核心方法 static func == (lhs: Cidades, rhs: Cidades) -> Bool { // 这里可以只比较唯一标识,比如id,也可以比较所有属性 return lhs.id == rhs.id } }
验证实例是否存在的用法
实现Equatable之后,你就可以用数组的contains(_:)方法轻松判断API获取的实例是否在本地数组里了:
// 假设从API解析得到了新的cidade实例 guard let novaCidade = response.result.value as? Cidades else { // 解析失败的处理 completion(false) return } if cidades.contains(novaCidade) { print("该城市已存在于本地数组") } else { print("该城市不存在,添加到数组") cidades.append(novaCidade) }
如果你的判断逻辑不需要完全匹配所有属性,只需要根据某个字段(比如id)来判断,在==方法里只比较那个字段就好,这样更高效哦。
内容的提问来源于stack exchange,提问作者AND4011002849
相关产品推荐
相关产品推荐

