gpt4 book ai didi

带有参数 : how to compare them? 的 Swift 枚举

转载 作者:搜寻专家 更新时间:2023-11-01 06:43:11 29 4
gpt4 key购买 nike

我有以下枚举:

enum Message: ErrorType {
case MessageWithInfo(info:String?)
case MessageDidFail
case MessageDidSend(info:String)
case InvalidMessageData
case MessageWithDelay(delay:Double)
.... will keep adding more
}

我正在尝试弄清楚如何编写 Equatable 函数,然后让我比较 Message 枚举。

我在堆栈溢出上发现了一些类似的问题,但我找不到一个可以让我进行比较而不必打开每个案例的问题。

有没有办法只编写一次 equatable 函数,即使我不断向该枚举中添加更多情况,它也能正常工作?

最佳答案

编写一个适用于所有枚举的函数是不可能的。这基本上就是你想要的。

原因是讨论here .第二个答案显示了一种可与具有 rawValue 的枚举一起使用的方法。

这是因为混合类型的枚举失去了原始值。

您可以编写一个开关来获取原始值(您必须忽略关联的值)。但这不能自动完成。

对于 Struct 或 Class,您也无法编写自动创建其中声明的所有 var 的序列/集合的方法。就像枚举无法从它的案例中创建序列/集合一样。

enum Message: ErrorType {

case MessageWithInfo(info:String?)
case MessageDidFail
case MessageDidSend(info:String)
case InvalidMessageData
case MessageWithDelay(delay:Double)

var rawValue : Int {
get {
switch self {
case .MessageWithInfo(info: _) : return 0
case .MessageDidFail : return 1
case .MessageDidSend(info: _) : return 2
case .InvalidMessageData : return 3
case .MessageWithDelay(delay: _) : return 4

}
}
}
}

func ==(lhs:Message,rhs:Message) -> Bool {

return (lhs.rawValue == rhs.rawValue)

}

关于带有参数 : how to compare them? 的 Swift 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33576535/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com