访问Objective-C中嵌套的Swift enum



我有一个嵌套的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
}

相关内容

  • 没有找到相关文章

最新更新