Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了具有相关值的swift枚举中的等于运算符重载大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我知道之前有一个几乎类似的问题,但是我无对此发表评论,因为我是新来的.这就是我发布分离问题的原因.此外,我的问题是对上一个问题的扩展,旨在提供更一般的解决方案.这是上一个问题的链接: How to test equality of Swift enums with associated values 我想在枚举中测试相关值的相等性: enum MyEnum { case None
@H_301_1@
我知道之前有一个几乎类似的问题,但是我无对此发表评论,因为我是新来的.这就是我发布分离问题的原因.此外,我的问题是对上一个问题的扩展,旨在提供更一般的解决方案.这是上一个问题的链接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部分按预期工作,但不是其余的…所以案例列表有点长,我如何测试与它们没有相值的案例是否相等?

解决方法

@H_403_26@ 在您的实施中,

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枚举中的等于运算符重载所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。