gpt4 book ai didi

ios - 将枚举与 Swift 中的关联值进行比较

转载 作者:搜寻专家 更新时间:2023-10-31 22:07:38 25 4
gpt4 key购买 nike

对于具有关联值的枚举,Swift 不提供相等运算符。所以我实现了一个能够比较两个枚举的方法:

enum ExampleEnum{
case Case1
case Case2(Int)
case Case3(String)
...
}

func ==(lhs: ExampleEnum, rhs: ExampleEnum) -> Bool {

switch(lhs, rhs){
case (.Case1, .Case1): return true
case let (.Case2(l), .Case2(r)): return l == r
case let (.Case3(l), .Case3(r)): return l == r
...
default: return false
}
}

我的问题是我有很多这样的枚举和很多案例,所以我需要写很多这样的比较代码(针对每个枚举,每个案例)。

如您所见,此代码始终遵循相同的方案,因此似乎有一种更抽象的方式来实现比较行为。有没有办法解决这个问题?例如泛型?

最佳答案

从 Swift 4.2 开始,只需添加 Equatable 协议(protocol)一致性。它将自动实现。

enum ExampleEquatableEnum: Equatable {
case case1
case case2(Int)
case case3(String)
}

print("ExampleEquatableEnum.case2(2) == ExampleEquatableEnum.case2(2) is \(ExampleEquatableEnum.case2(2) == ExampleEquatableEnum.case2(2))")
print("ExampleEquatableEnum.case2(1) == ExampleEquatableEnum.case2(2) is \(ExampleEquatableEnum.case2(1) == ExampleEquatableEnum.case2(2))")

即默认比较会考虑相关值。

关于ios - 将枚举与 Swift 中的关联值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31935209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com