如何比较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
相关产品推荐
相关产品推荐

