如何将具有枚举键的Swift字典转换为NSDictionary?

3

我无法将一个Swift字典转换为NSDictionary。我使用了Swift的枚举作为我的字典键:

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
3个回答

5

如果您的字典有枚举值,那么您无法将其转换为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]

希望这能帮到你。

感谢使用.rawValue - Islam

1

它们中的任何一个(StringEnum, String, Dictionary) 都不是obj-c类型,因此您无法隐式地执行该操作。你一定需要一个循环。


1

这是一个投诉,因为你不能将值类型保存到NSDictionary中(枚举是一种值类型)。你必须将其包装成NSNumber或任何其他类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接