具有相关值的swift枚举中的等于运算符重载
发布时间:2020-12-14 05:00:30 所属栏目:百科 来源:网络整理
导读:我知道之前有一个几乎类似的问题,但是我无法对此发表评论,因为我是新来的.这就是我发布分离问题的原因.此外,我的问题是对上一个问题的扩展,旨在提供更一般的解决方案.这是上一个问题的链接: How to test equality of Swift enums with associated values 我
我知道之前有一个几乎类似的问题,但是我无法对此发表评论,因为我是新来的.这就是我发布分离问题的原因.此外,我的问题是对上一个问题的扩展,旨在提供更一般的解决方案.这是上一个问题的链接:
How to test equality of Swift enums with associated values
我想在枚举中测试相关值的相等性: enum MyEnum { case None case Error case Function(Int) // it is a custom type but for briefness an Int here case ... } 我试着设置一个重载函数,如下所示 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 } } } 这不会产生编译时错误,但在运行过程中会因bad_exec而失败.很可能是因为在默认情况下测试a == b,再次调用函数本身. .Function部分按预期工作,但不是其余的…所以案例列表有点长,我如何测试与它们没有相关值的案例是否相等? 解决方法
在您的实施中,
if (a == b) { 递归地再次调用相同的==函数.这最终会因堆栈溢出而崩溃. 例如,一个有效的实施方案是: func ==(a: MyEnum,.Function(let bb)): return aa == bb case (.Error,.Error): return true case (.None,.None): return true default: return false } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |