2

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

  • 我有一个 objCenumAbc
  • 我在一个 swift 类中声明了这一点,比如说MySwiftClass.swiftvar abc : Abc!
  • mySwiftClass在另一个 ObjC 类(myObjC.m 文件)中创建了 MySwiftClass ( )的实例
  • 在 myObjC.m 中,我试图将枚举 Abc 访问为mySwiftClass.abc.

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

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

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

4

1 回答 1

3

数字 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不会。

于 2017-05-26T15:36:09.460 回答