我想在枚举中测试相关值的相等性:
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枚举中的等于运算符重载所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)