2014-09-21 42 views
3

我将我的项目的部分内容移植到Swift,并发现枚举不可互操作。在Objective-C和Swift之间枚举互操作性

此外,使用枚举的任何属性和函数都不会暴露给objective-c,因为枚举在objective-c中没有等价关系。

即使枚举是NSInteger类型,仍然不显示枚举。

如何解决此互操作性问题,使swift类尽可能干净?

+2

你不会得到Swift-native'enum'类型的所有功能,但是一种选择是在Objective-C中使用'NS_ENUM'宏来声明它们。这些被作为'enum'导入到Swift中,并且可以从你的Obj-C代码中访问(显然)。 – 2014-09-22 01:14:47

回答

3

Swift 2:在Swift 2中,您现在可以将枚举暴露给Objective-C。使枚举非泛型,从简单的数字类型继承(如Int),并且不使用关联的值。然后,它将在Objective-C中显示出来,这些枚举的名称预先注册到了案例中,因此它看起来像一个Objective-C枚举。

编辑:为了确保它显示出来,请用@objc对它进行注释。如果有任何问题阻止它自动桥接,你会得到一个编译器错误。

Swift 1.x: 答案是你不能,至少目前不行。如果你想与枚举进行互操作,你需要在Objective-C中声明它们。

正如Nate所说,使用NS_ENUM,Swift会将定义拉为enum,并从值中去掉前缀。

+0

最有可能的是最好的解决方案 – ByteArtisan 2014-10-07 20:11:53