2015-07-13 93 views
2

我無法將Swift字典轉換爲NSDictionary。我使用的是斯威夫特枚舉爲我的字典的關鍵:如何將具有枚舉鍵的Swift字典轉換爲NSDictionary?

enum StringEnum : String { 
    case Lemon = "lemon" 
    case Orange = "orange" 
} 

var swiftDictionary = [StringEnum: AnyObject]() 
swiftDictionary[.Lemon] = "string value" 
swiftDictionary[.Orange] = 123 

當我嘗試將其與as關鍵字轉換爲NSDictionary

let objcDictionary: NSDictionary = swiftDictionary as NSDictionary 

我得到的編譯器錯誤:

'[StringEnum : AnyObject]' is not convertible to 'NSDictionary' 

可以轉換這些類型的字典嗎?或者我需要循環Swift字典並手動創建NSDictionary

回答

4

我認爲,如果你的字典有枚舉值,則無法將其轉換爲NSDictionary,但另一種方式來做到這一點是:

//change the type of your dict to [String: AnyObject]() 
var swiftDictionary = [String: AnyObject]() 

//you can store rawValue as a key 
swiftDictionary[StringEnum.Lemon.rawValue] = "string value" 
swiftDictionary[StringEnum.Orange.rawValue] = 123 

let objcDictionary = swiftDictionary as NSDictionary //["lemon": "string value", "orange": 123] 

希望這會有所幫助。

+0

感謝'.rawValue' –

1

其中沒有一個(StringEnum,String,Dictionary)是obj-c類型,因此您不能這樣做隱含。你肯定需要一個循環。

1

這是投訴,因爲你不能將值類型保存到NSDictionary(枚舉是一個值類型)。您必須將其包裝爲NSNumber或任何其他類型。