2017-05-26 93 views
2

我有一种情况。如果任何人有这个在Objc中定义的枚举>在Swift中声明>在Objc中使用

  • 一个解决方案,我会感谢我有一个objC enumAbc
  • 我宣布这迅速类,比如说,MySwiftClass.swift作为var abc : Abc!
  • 我创建MySwiftClass的一个实例( mySwiftClass)在另一个ObjC类(myObjC.m文件)中
  • 在myObjC.m中,我试图访问枚举Abc作为mySwiftClass.abc

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

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

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

回答

3

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

考虑这个目的-C枚举:

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

然后考虑此夫特3类:

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

非可选的,foo1,将暴露于目标C,而可选,foo2,不会。