我需要声明变量,它将存储不同类型的枚举数组,例如:
var enums = [EnumTypeA.Option1, EnumTypeB.Option2]
编译器状态:
如果没有更多的上下文,表达的类型是不明确的
将任何枚举或其他对象作为函数参数传递是必要的。但是我发现我可以通过泛型实现这一点,例如:
func f1<T>(enum: T)
但是带有可选方法的协议(以@objc为前缀)是不可能的。
答案 0 :(得分:2)
您可以使用协议......
protocol MyEnums {}
enum MyEnum1: MyEnums {
case first, second
}
enum MyEnum2: MyEnums {
case red, green
}
let myArray: [MyEnums] = [MyEnum1.first, MyEnum2.green]
func myFunc(myEnum: MyEnums) {
print(myEnum)
}
for value in myArray {
myFunc(myEnum: value)
}
答案 1 :(得分: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
然后使用switch语句将value
属性向下转换为各种枚举,并相应地处理它们。