gpt4 book ai didi

Swift:带有 switch 语句的嵌套枚举

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

如何使用 switch-case 处理嵌套枚举?

我有以下枚举:

enum Parent: Int {

enum Nested1: Int {
case Bow
case Sword
case Lance
case Dagger
}
enum Nested2: Int {
case Wooden
case Iron
case Diamond
}

//case Nested1 -- Not allowed
//case Nested2 -- Not allowed
case Case3
case Case4
case Case5

}

如何使用 switch-case 处理它?<​​/p>

我有两个整数变量用于父级和嵌套枚举情况。

let parent = 1
let nested = 2

我正在尝试以下方式但失败了(下面的代码不起作用)。

let parentCase =  Parent(rawValue: parent)

switch parentCase {
case .Nested1:
print("Weapon")

case .Nested2:
print("Helmet")
let nestedCase = Parent.Nested2(rawValue: nested)

switch nestedCase {
case .Wooden:
print("Weapon")

case .Iron:
print("Iron")

case .Diamond:
print("Diamond")

default:
print("")
}

default:
print("")
}

简单的问题:我想借助 parentnested 整数的值来处理案例 Iron(或任何特定案例) .

或者有没有更好的方法来定义嵌套枚举,可以使用 switch-case 轻松处理?

最佳答案

您的方法会奏效,只是您的实现存在一些问题。这种方法是否是最好的方法是一个不同的问题,这取决于您的要求。如果可能的话,我会切换到具有父级关联值的枚举。

  1. 您的 Nested1 枚举案例不能与您的 Nested1 枚举同名。无论如何,枚举案例都应以小写字母开头,因此很容易修复。

  2. 具有 Int 原始值的枚举的案例默认从 0 开始,但您希望第一个案例映射到 1,因此您需要明确说明这一点。

  3. 用原始值初始化枚举会返回一个可选值,因此您应该在打开该可选值之前打开它。

解决这些问题应该给你这个,打印“ Helm ”和“铁”:

enum Parent: Int {

enum Nested1: Int {
case bow = 1
case sword
case lance
case dagger
}

enum Nested2: Int {
case wooden = 1
case iron
case diamond
}

case nested1 = 1
case nested2
case case3
case case4
case case5

}

let parent = 2
let nested = 2

guard let parentCase = Parent(rawValue: parent) else {
// Do something to handle invalid enum case here
fatalError()
}

switch parentCase {
case .nested1:
print("Weapon")

case .nested2:
print("Helmet")
guard let nestedCase = Parent.Nested2(rawValue: nested) else {
// Do something to handle invalid enum case here
break
}

switch nestedCase {
case .wooden:
print("Weapon")

case .iron:
print("Iron")

case .diamond:
print("Diamond")

default:
print("")
}

default:
print("")
}

关于Swift:带有 switch 语句的嵌套枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49199637/

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