gpt4 book ai didi

swift - 如何仅检查 Swift 嵌套枚举是否与外部枚举相等?

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

我正在尝试使用嵌套枚举来描述我的模型,以一种使非法状态成为不可能并在顶层提供分类的方式。现在,我的(简化的)代码是:

enum SportsEvent {

enum RunningEvent {
case sprint
case marathon
}

enum ThrowingEvent {
case hammer
case javelin
case discus
}

case running(event: RunningEvent)
case throwing(event: ThrowingEvent)

func isSameCategory(as other: SportsEvent) -> Bool {

return false
}
}

let sprint = SportsEvent.running(event: .sprint)
let javelin = SportsEvent.throwing(event: .javelin)
let hammer = SportsEvent.throwing(event: .hammer)

sprint.isSameCategory(as: javelin) // False
hammer.isSameCategory(as: javelin) // True

使用 if case ... 和通配符感觉应该是微不足道的,但我不知道如何实现它。我希望不需要巨大的 switch 语句,因为我的实际模型更复杂。

最佳答案

我想你需要一个 switch 语句,用一个“复合案例”列出所有外部枚举的可能“相同值组合”,加上默认情况:

func isSameCategory(as other: SportsEvent) -> Bool {
switch (self, other) {
case (.running, .running),
(.throwing, .throwing):
return true
default:
return false
}
}

或者(归因于@Hamish):

func isSameCategory(as other: SportsEvent) -> Bool {
switch (self, other) {
case (.running, .running),
(.throwing, .throwing):
return true
case (.running, _),
(.throwing, _):
return false
}
}

它的优点是编译器会检查是否涵盖了所有情况。对于包含 n 的枚举,使得 2 * nswitch 语句中的情况(如果您检查了所有可能的组合,这比 n * n 更好)。

关于swift - 如何仅检查 Swift 嵌套枚举是否与外部枚举相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50586223/

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