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

如何比较Swift同一枚举的不同实例?特定匹配需求实现问询

如何比较Swift中同一枚举的不同实例(仅匹配枚举case,忽略关联值)

刚好碰到过类似的需求,咱们的核心目标是判断两个枚举实例是否属于同一个case,完全忽略关联值的差异。默认的==运算符会要求关联值也完全相等才返回true,显然不符合咱们的需求,所以得自定义比较逻辑。下面给你两种实用的实现方式:

方法一:给枚举添加case标识属性

给枚举扩展一个计算属性,用来返回每个case的唯一标识,之后只要比较这个标识就能判断是否是同一个case:

enum Types {
    case string(String), int(Int), bool(Bool)
    
    // 新增计算属性,返回当前case的唯一标识
    var caseType: String {
        switch self {
        case .string: return "string"
        case .int: return "int"
        case .bool: return "bool"
        }
    }
}

// 自定义比较函数
func compare(lhs: Types, rhs: Types) -> Bool {
    return lhs.caseType == rhs.caseType
}

测试一下效果:

let t1 = Types.string("one")
let t2 = Types.string("two")
let t3 = Types.int(3)

print(compare(lhs: t1, rhs: t2)) // 输出 true(同case,忽略关联值)
print(compare(lhs: t1, rhs: t3)) // 输出 false(不同case)

方法二:直接在比较函数中匹配case

如果枚举的case数量不多,也可以直接在compare函数里用switch同时匹配左右两个实例,代码更简洁:

enum Types {
    case string(String), int(Int), bool(Bool)
}

func compare(lhs: Types, rhs: Types) -> Bool {
    switch (lhs, rhs) {
    // 匹配所有同case的组合
    case (.string, .string), (.int, .int), (.bool, .bool):
        return true
    // 其他情况都是不同case
    default:
        return false
    }
}

同样的测试代码会得到完全一致的结果,这种方法不需要额外扩展枚举,适合case数量较少的场景。

内容的提问来源于stack exchange,提问作者Joseph Beuys' Mum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:59:23