2014-10-01 25 views
3

我試圖創建一個斯威夫特框架,其他iOS可用使用雨燕或目的C.如何使用枚舉在iOS 8的斯威夫特框架的公共API

在我的幾個公共函數的應用程序,我需要的使用枚舉。當然,斯威夫特有枚舉,但這些都不是使用目的C.因此客戶端應用程序兼容,然後我試着用以下形式的目標C風格的枚舉:

typedef NS_ENUM(NSInteger, MyEnumType) 
{ 
    MyEnumTypeGreen, 
    MyEnumTypeBlue, 
    MyEnumTypeYellow 
}; 

爲了使這個枚舉類型的公共,我把這個聲明在PublicEnums.h中。從我的銀行代碼的訪問,我需要這條線在我的框架,項目的銜接,Header.h:

#import "PublicEnums.h" 

但後來我得到這個錯誤:

Include of non-modular header inside framework module 'MyFramework' which flags a line in the auto-generated MyFramework-Swift.h file:

#import "/Users/sourcepath.../ObjectiveC/MyFramework-Bridging-Header.h" 

難道真的沒有辦法在Objective-C應用程序中可用的Swift框架中使用任何類型的枚舉?

回答

1

我剛剛在一個新項目中測試了這一切,一切正常。我認爲你的錯誤是由於沒有正確使用橋接頭。

我想你不應該用導入語句導入橋接頭。應自動添加到你的目標的生成設置的橋接報頭項下:

Objective-C Bridging Header ------  projectName/projectName-Bridging-Header.h 

該鍵的原始名稱是SWIFT_OBJC_BRIDGING_HEADER

測試:

let x = MyEnumType.Blue 
    println("\(x.toRaw())") // 1 

注意,在Xcode 6.1的最後一行將使用rawValue

+0

謝謝。但我不是#導入橋接頭;正如你所描述的那樣,它實際上是在項目級設置的。發生該錯誤是因爲自動生成的MyFramework-Swift.h自動包含該#import語句。我認爲重現你需要一個工作空間,同時包含一個Swift框架和一個引用該框架的示例應用程序。 – Daniel 2014-10-01 21:43:20

+0

如果您有不兼容的框架,請維護人員更新它。 – Mundi 2014-10-02 11:41:13

+0

我是框架創建者 – Daniel 2014-10-02 16:44:03