如何在Objective-C Header中引用Swift枚举

Phi*_*hil 17 objective-c swift

有没有办法从Objective-C头引用Swift枚举?如果你想在Objective-C头中看到Swift类,你可以使用

@objc class Foo
Run Code Online (Sandbox Code Playgroud)

我没有看到任何类似的枚举.

raf*_*raf 24

你想做什么叫做forward declaration.要转发声明枚举,您可以执行以下操作:

enum name;
Run Code Online (Sandbox Code Playgroud)

但由于编译器不知道枚举的大小,因此您只能将其用作头文件中的指针.如果你使用像这样的编译器标志,即使这样做也可能会有问题-pedantic.

简而言之,没有好办法做到这一点.你最好的选择不是,而是从你的实现(.m)文件中访问枚举.

在您的实现文件中,#import您的swift桥接头文件,并且在不知道有关您的问题的更多详细信息的情况下,您可以添加使用您的枚举的私有属性,如下所示:

@interface MyObjCClassDefinedInTheHFile()
    @property (nonatomic, assign) SomeSwiftEnum type;
@end
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 正向声明工作:`typedef SWIFT_ENUM(NSInteger,MyEnum);` (7认同)
  • 有谁知道为什么 `typedef NS_ENUM(NSInteger, MyEnum);` 对我有用,但 `typedef SWIFT_ENUM(NSInteger, MyEnum);` 不行? (5认同)
  • 同意没有好的答案.我正在研究的代码库在Swift和Objective C之间流动,所以我的解决方案是在一个(某种程度上)适当的objc文件中声明枚举,直到我们完全使用Swift.使用桥接头文件以这种方式在objc和swift之间共享枚举要简单得多. (4认同)
  • 尝试`typedef NS_ENUM(NSInteger,MyEnum);`进行前向声明。 (2认同)
  • @ArielSD 看来“SWIFT_ENUM”现在需要第三个参数,称为“可扩展性” (2认同)

aml*_*szk 11

typedef SWIFT_ENUM(NSInteger, MyEnum);