2017-05-26 97 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,不會。