Swift - 将同一变量的不同枚举类型传递给一个类

标签 swift enums

我如何将不同的枚举类型传递给同一个变量,稍后识别它的类型并使用它的原始值来做一些操作?

我有两个字符串类型的枚举 Menu1Menu2。我喜欢将枚举数组传递给另一个显示子菜单的类。我喜欢将枚举传递给同一个变量,因为我将来可能会添加另一个菜单。

最佳答案

要应用抽象,您可以使用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/

相关文章:

grails - 如何获得常规混合的目标类?

objective-c - 像在 java 中一样为 objC 重新定义枚举

java - 在 Spring MVC 应用程序中使用 Java 枚举?

ios - SWIFT如何在触摸屏幕时播放声音

ios - Xcode 调试器崩溃 (Xcode 6.1/LLDB/Yosemite)

json - 快速读取在线 JSON 文件

ios - 无法使用 Parse Server 上传图像

ios - 如何多投一个正在进行的 Action 的结果或开始一个新 Action

swift - 在 Swift 中是否存在 Enum.GetName(Type,‖Object) 方法的替代方法?

c# - 如何在 If 语句中评估 Enum?