Kru*_*nal 1 enums enumeration switch-statement swift
如何使用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
}
Run Code Online (Sandbox Code Playgroud)
我怎么能用它来处理它switch-case.
对于父枚举和嵌套枚举,我有两个整数变量.
let parent = 1
let nested = 2
Run Code Online (Sandbox Code Playgroud)
我正在尝试以下方式,但失败了(下面的代码,不起作用).
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("")
}
Run Code Online (Sandbox Code Playgroud)
简单的问题:我希望Iron借助于值parent和nested整数来达到案例(或任何特定情况).
或者有没有更好的方法来定义嵌套枚举,可以使用switch-case轻松处理?
您的方法可行,您的实施只会遇到一些问题.这种方法是否是最好的方法是一个不同的问题,这取决于您的要求.如果可能的话,我会切换到具有父级关联值的枚举.
您的Nested1枚举案例不能与Nested1枚举名称相同.无论如何,枚举案例应以小写字母开头,因此很容易修复.
具有Int原始值的枚举的情况默认情况下从0开始,但是您希望第一种情况映射到1,因此您需要明确说明.
使用原始值初始化枚举将返回一个可选项,因此您应该在打开它之前解开该可选项.
修复这些问题应该给你这个,打印"头盔"和"铁":
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("")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
826 次 |
| 最近记录: |