NSDictionary,如何存储和读取枚举值?

5

如何在Swift中将枚举值存储和读取到NSDictionary中。

我定义了一些类型

enum ActionType {
    case Person
    case Place
    case Activity    
}

将枚举写入字典
myDictionary.addObject(["type":ActionType.Place])

"AnyObject没有名为key的成员"

阅读

var type:ActionType = myDictionary.objectForKey("type") as ActionType

"Type 'ActionType' does not conform to protocol 'AnyObject'"

我还试过将 ActionType 包装为 NSNumber/Int,但并没有完全成功。对于如何在 NSDictionaries 中正确存储和读取枚举值,有什么建议吗?

1个回答

8

这是一个问题,因为你无法将值类型存储到NSDictionary中(枚举是值类型)。 你需要将其包装成NSNumber,但记得在此枚举上调用toRaw方法,尝试这样做:

enum ActionType : Int {
    case Person
    case Place
    case Activity
}
var myDictionary = NSDictionary(object:NSNumber(integer: ActionType.Place.toRaw()), forKey:"type")

// 扩展

以下是逐步访问它的方法:

let typeAsNumber = myDictionary["type"] as? NSNumber
let tmpInt = typeAsNumber?.integerValue

let typeValue = ActionType.fromRaw(tmpInt!)
println(typeValue!.toRaw())

哦,这很有道理。非常感谢您的解释。将字典值转换回枚举的最佳方法是什么?我尝试了 var typeValue:ActionType = (myDictionary.objectForKey("type") as NSNumber).intValue …但没有成功。 - Bernd
@BerndPlontsch 请查看扩展答案。 - Greg
我认为字典和数组可以接受任何对象作为值。这听起来像是属性列表的对象限制。 - Rivera
@Rivera 字典和数组可以接受任何对象,但是 NSDictionaries 和 NSArrays 只能接受对象,而不能接受原始值。 - Greg

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