2015-07-13 58 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或任何其他类型。