如何将具有枚举键的Swift字典转换为NSDictionary?
问题描述:
我无法将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
?
答
我认为,如果你的字典有枚举值,则无法将其转换为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]
希望这会有所帮助。
答
其中没有一个(StringEnum
,String
,Dictionary
)是obj-c
类型,因此您不能这样做隐含。你肯定需要一个循环。
答
这是投诉,因为你不能将值类型保存到NSDictionary(枚举是一个值类型)。您必须将其包装为NSNumber或任何其他类型。
感谢'.rawValue' –