【问题标题】:Enums Interoperability between Objective-C and SwiftObjective-C 和 Swift 之间的枚举互操作性
【发布时间】:2014-09-21 21:32:59
【问题描述】:

我正在将我的项目的一部分移植到 Swift 并发现枚举不能互操作。

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

即使枚举是 NSInteger 类型,枚举也不会暴露。

如何解决这个互操作性问题,尽可能保持 swift 类的整洁?

【问题讨论】:

  • 您不会获得 Swift 原生 enum 类型的所有功能,但一种选择是在 Objective-C 中使用 NS_ENUM 宏声明它们。这些以enum 的形式导入到 Swift 中,并且(显然)可以从您的 Obj-C 代码中访问。

标签: objective-c enums swift


【解决方案1】:

Swift 2:在 Swift 2 中,您现在可以向 Objective-C 公开枚举。使枚举非泛型,从简单的数字类型(如Int)继承,并且不要使用关联值。然后它将显示在 Objective-C 中,枚举的名称附加在 case 前面,因此它看起来像一个 Objective-C 枚举。

编辑:为确保它显示出来,请使用@objc 对其进行注释。如果有任何问题阻止它自动桥接,您将收到编译器错误。

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

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

【讨论】:

  • 很可能是最好的解决方案
【解决方案2】:

Here 是一个简单的 Xcode 项目,其中 Swift 枚举被目标 C 访问,目标 C 枚举被 Swift 访问

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    相关资源
    最近更新 更多