Swift:带有 switch 语句的嵌套枚举
Swift: Nested enum with switch statement
如何使用 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
如何处理?
我有两个用于父枚举和嵌套枚举案例的整数变量。
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("")
}
简单问题:我想在 parent
和 nested
整数值的帮助下达到案例 Iron
(或任何特定案例)。
或者有没有更好的方法来定义嵌套枚举,可以用 switch-case 轻松处理?
您的方法会奏效,只是您的实施存在一些问题。这种方法是否是最好的方法是一个不同的问题,这取决于您的要求。如果可能的话,我会切换到具有父级关联值的枚举。
您的 Nested1
枚举案例不能与您的 Nested1
枚举同名。枚举大小写无论如何都应该以小写字母开头,所以这很容易修复。
具有 Int
原始值的枚举的案例默认从 0 开始,但您希望第一个案例映射到 1,因此您需要明确说明。
用原始值初始化一个枚举returns一个可选的,所以你应该在打开它之前打开那个可选的。
解决这些问题应该会给你这个,打印 "Helmet" 和 "Iron":
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("")
}
如何使用 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
如何处理?
我有两个用于父枚举和嵌套枚举案例的整数变量。
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("")
}
简单问题:我想在 parent
和 nested
整数值的帮助下达到案例 Iron
(或任何特定案例)。
或者有没有更好的方法来定义嵌套枚举,可以用 switch-case 轻松处理?
您的方法会奏效,只是您的实施存在一些问题。这种方法是否是最好的方法是一个不同的问题,这取决于您的要求。如果可能的话,我会切换到具有父级关联值的枚举。
您的
Nested1
枚举案例不能与您的Nested1
枚举同名。枚举大小写无论如何都应该以小写字母开头,所以这很容易修复。具有
Int
原始值的枚举的案例默认从 0 开始,但您希望第一个案例映射到 1,因此您需要明确说明。用原始值初始化一个枚举returns一个可选的,所以你应该在打开它之前打开那个可选的。
解决这些问题应该会给你这个,打印 "Helmet" 和 "Iron":
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("")
}