2014-09-21 45 views
3

我將我的項目的部分內容移植到Swift,並發現枚舉不可互操作。在Objective-C和Swift之間枚舉互操作性

此外,使用枚舉的任何屬性和函數都不會暴露給objective-c,因爲枚舉在objective-c中沒有等價關係。

即使枚舉是NSInteger類型,仍然不顯示枚舉。

如何解決此互操作性問題,使swift類儘可能乾淨?

+2

你不會得到Swift-native'enum'類型的所有功能,但是一種選擇是在Objective-C中使用'NS_ENUM'宏來聲明它們。這些被作爲'enum'導入到Swift中,並且可以從你的Obj-C代碼中訪問(顯然)。 – 2014-09-22 01:14:47

回答

3

Swift 2:在Swift 2中,您現在可以將枚舉暴露給Objective-C。使枚舉非泛型,從簡單的數字類型繼承(如Int),並且不使用關聯的值。然後,它將在Objective-C中顯示出來,這些枚舉的名稱預先註冊到了案例中,因此它看起來像一個Objective-C枚舉。

編輯:爲了確保它顯示出來,請用@objc對它進行註釋。如果有任何問題阻止它自動橋接,你會得到一個編譯器錯誤。

Swift 1.x: 答案是你不能,至少目前不行。如果你想與枚舉進行互操作,你需要在Objective-C中聲明它們。

正如Nate所說,使用NS_ENUM,Swift會將定義拉爲enum,並從值中去掉前綴。

+0

最有可能的是最好的解決方案 – ByteArtisan 2014-10-07 20:11:53