在Objc中定义的枚举>在Swift中声明>在Objc中使用

时间:2017-05-26 14:00:53

标签: objective-c swift enums objc-bridging-header

我有一个情况。如果有人有解决方案,我将不胜感激

  • 我有一个objC enumAbc
  • 我在一个快速的课堂上宣布这一点,比如MySwiftClass.swift var abc : Abc!
  • 我在另一个ObjC类(myObjC.m文件)中创建了MySwiftClass(mySwiftClass)的实例
  • 在myObjC.m中,我正在尝试将枚举Abc作为mySwiftClass.abc访问。

这会抛出一个错误 - 在MySwiftClass *类型的对象上找不到“属性'abc'。” 基本上,枚举不会作为属性添加到“ProjectName-Swift.h”文件中。

我相信正在发生的事情是,当我在Swift类中声明ObjC枚举时,它会被转换为快速枚举,因此我无法在ObjC文件中访问它。

注意:将Swift类标记为@objc不起作用。

1 个答案:

答案 0 :(得分:3)

Numeric Swift选项不能在Objective-C中表示,因此不会暴露给Objective-C。声明abc不是可选的,它应该可以从Objective-C获得。

考虑这个Objective-C枚举:

typedef NS_ENUM(NSInteger, Foo) {
    FooBar,
    FooBaz,
    FooQux
};

然后考虑这个Swift 3类:

class SomeObject: NSObject {
    var foo1: Foo  = .bar          // this is exposed to Objective-C
    var foo2: Foo! = .bar          // this is not
}

非可选的foo1将会暴露给Objective-C,而可选的foo2则不会。