具有相关值的swift枚举中的等于运算符重载

具有相关值的swift枚举中的等于运算符重载,第1张

概述我知道之前有一个几乎类似的问题,但是我无法对此发表评论,因为我是新来的.这就是我发布分离问题的原因.此外,我的问题是对上一个问题的扩展,旨在提供更一般的解决方案.这是上一个问题的链接: How to test equality of Swift enums with associated values 我想在枚举中测试相关值的相等性: enum MyEnum { case None 我知道之前有一个几乎类似的问题,但是我无法对此发表评论,因为我是新来的.这就是我发布分离问题的原因.此外,我的问题是对上一个问题的扩展,旨在提供更一般的解决方案.这是上一个问题的链接: 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    }}
总结

以上是内存溢出为你收集整理的具有相关值的swift枚举中的等于运算符重载全部内容,希望文章能够帮你解决具有相关值的swift枚举中的等于运算符重载所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1017807.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存