eno*_*tia 6 enums equality operator-overloading swift
我知道之前有一个几乎类似的问题,但是我无法对此发表评论,因为我是新来的.这就是我发布分离问题的原因.此外,我的问题是对上一个问题的扩展,旨在提供更一般的解决方案.这是前一个问题的链接:如何测试Swift枚举与相关值的相等性
我想在枚举中测试相关值的相等性:
enum MyEnum {
case None
case Error
case Function(Int) // it is a custom type but for briefness an Int here
case ...
}
Run Code Online (Sandbox Code Playgroud)
我试着设置一个重载函数,如下所示
func ==(a: MyEnum, b: MyEnum) -> Bool {
switch (a,b) {
case (.Function(let aa), .Function(let bb)):
if (aa==bb) {
return true
} else {
return false
}
default:
if (a == b) {
return true
} else {
return false
}
}
}
Run Code Online (Sandbox Code Playgroud)
这不会产生编译时错误,但在运行过程中会因bad_exec而失败.很可能是因为在默认情况下测试a == b,再次调用函数本身..Function部分按预期工作,但不是其余的...所以案例列表有点长,我如何测试与它们没有相关值的案例是否相等?
在您的实施中,
if (a == b) {
Run Code Online (Sandbox Code Playgroud)
再次递归调用相同的==
函数。这最终会因堆栈溢出而崩溃。
例如,一个可行的实现是:
func ==(a: MyEnum, b: MyEnum) -> Bool {
switch (a,b) {
case (.Function(let aa), .Function(let bb)):
return aa == bb
case (.Error, .Error):
return true
case (.None, .None):
return true
default:
return false
}
}
Run Code Online (Sandbox Code Playgroud)