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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:14:41