我如何将不同的枚举类型传递给同一个变量,稍后识别它的类型并使用它的原始值来做一些操作?
我有两个字符串类型的枚举 Menu1
和 Menu2
。我喜欢将枚举数组传递给另一个显示子菜单的类。我喜欢将枚举传递给同一个变量,因为我将来可能会添加另一个菜单。
最佳答案
要应用抽象,您可以使用protocol
,如下所示:
protocol Menu {}
enum Menu1: String, Menu {
case option1 = "Option 01 From Menu 01"
case option2 = "Option 02 From Menu 01"
case option3 = "Option 03 From Menu 01"
case option4 = "Option 04 From Menu 01"
case option5 = "Option 05 From Menu 01"
}
enum Menu2: String, Menu {
case option1 = "Option 01 From Menu 02"
case option2 = "Option 02 From Menu 02"
case option3 = "Option 03 From Menu 02"
case option4 = "Option 04 From Menu 02"
case option5 = "Option 05 From Menu 02"
}
通过实现它,您可以声明 Menu
类型的数组,其中包括两个枚举:
let myMenu1Array: [Menu1] = [.option1, .option2, .option5]
let myMenu2Array: [Menu2] = [.option1, .option3, .option4]
例如,一个将参数作为 Menu
数组的函数应该可以工作:
func handleMenu(_ menuArray: [Menu]) {
if let menu1Array = menuArray as? [Menu1] {
print("Menu 1 Detected!")
// you could iterate through it for instance...
for option in menu1Array {
print(option.rawValue)
}
return
}
if let menu2Array = menuArray as? [Menu2] {
print("Menu 2 Detected!")
// you could iterate through it for instance...
for option in menu2Array {
print(option.rawValue)
}
return
}
}
输出将是:
handleMenu(myMenu1Array)
/*
Menu 1 Detected!
Option 01 From Menu 01
Option 02 From Menu 01
Option 05 From Menu 01
*/
handleMenu(myMenu2Array)
/*
Menu 2 Detected!
Option 01 From Menu 02
Option 03 From Menu 02
Option 04 From Menu 02
*/
因此,如果类中有一个应该表示菜单的属性,则可以将其声明为 Menu
的类型:
class MyClass {
...
var menu: Menu?
...
}
关于Swift - 将同一变量的不同枚举类型传递给一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45319562/