我有一个嵌套的swift enum如下:
@objc enum PARENT_ENUM: Int {
case test
@objc enum CHILD_ENUM: Int{
case CHILD_ENUM_CASE
}
}
我想在Objective-C中访问这个enum。我试着以下在objective - c中:
PARENT_ENUMTest; // This line is working.
PARENT_ENUM.CHILD_ENUMCHILD_ENUM_CASE; // nested attempt giving error.
PARENT_ENUM.CHILD_ENUM.CHILD_ENUM_CASE; // nested attempt giving error.
编译器给出'预期标识符或'(" error.
在我看来像是一个编译器错误,因为类中的嵌套类型在任何级别都可以成功导出。例如:
@objc class C1: NSObject {
@objc class C2: NSObject {
@objc class C3: NSObject {
}
}
@objc SomeEnum: Int {
}
}
,使所有类/枚举对Objective-C可用。
在这个问题得到解决之前,一个解决方法是在顶层定义两个枚举。无论如何,Objective-C的导出器扁平化了层次结构,所以即使嵌套的枚举对Objective-C可用,它也会在CHILD_ENUM
名称下,而不是PARENT_ENUM.CHILD_ENUM
,就像它需要在swift中使用一样。
但是如果你真的想要嵌套带来的命名空间,另一个解决方法是使用类型别名:
@objc enum ParentEnum: Int {
typealias ChildEnum = __ChildEnum
case test
}
// double underscored, to make it clearer for other to
// not directly use it
@objc(ChildEnum) enum __ChildEnum: Int {
case childEnumCase
}