如何使用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("")
}
简单问题:我希望借助Iron
和parent
整数的值来处理案例nested
(或任何特定情况)。
或者有没有更好的方法来定义嵌套枚举,可以使用switch-case轻松处理?
答案 0 :(得分:5)
您的方法可行,您的实施只会遇到一些问题。这种方法是否是最好的方法是一个不同的问题,这取决于您的要求。如果可能的话,我会切换到具有父级关联值的枚举。
您的Nested1
枚举案例与Nested1
枚举名称不同。无论如何,枚举案件应以小写字母开头,以便于修复。
具有Int
原始值的枚举的情况默认情况下从0开始,但您希望第一种情况映射到1,因此您需要明确说明。
使用原始值初始化枚举会返回一个可选项,因此您应该在打开它之前解开该可选项。
修复这些问题应该给你这个,打印"头盔"和" 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("")
}