Swift - 如何使用不同类型的枚举声明/的变量/功能?

Kak*_*arz 9 generics enums protocols ios swift

我需要声明变量,它将存储不同类型的枚举数组,例如:

var enums = [EnumTypeA.Option1, EnumTypeB.Option2]
Run Code Online (Sandbox Code Playgroud)

编译器状态:

如果没有更多的上下文,表达的类型是不明确的

将任何枚举或其他对象作为函数参数传递是必要的.但是我发现我可以通过泛型实现这一点,例如:

func f1<T>(enum: T)
Run Code Online (Sandbox Code Playgroud)

但是使用可选方法(以@objc为前缀)的协议是不可能的.

Cod*_*der 1

这很有趣。我没有选择泛型,而是选择了Any,因为这是一切的基础。

enum TypeA {
    case Option1
    case Option2
}

enum TypeB {
    case Option1
    case Option2
}

func acceptDifferentEnums(value: Any) {
    switch value {
    case let typeA as TypeA:
        print("This is TypeA")
    case let typeB as TypeB:
        print("This is typeB")
    default:
        print("This is something else")
    }
}


acceptDifferentEnums(TypeA.Option1) // This is TypeA
acceptDifferentEnums(TypeB.Option2) // This is TypeB
acceptDifferentEnums("Foo") // This is something else
Run Code Online (Sandbox Code Playgroud)

然后,您使用 switch 语句将value属性向下转换为各种枚举,并相应地处理它们。