NSKeyedArchiver不会将枚举值为

时间:2017-12-04 21:46:49

标签: swift nskeyedarchiver

我正在尝试使用NSKeyedArchiver来“归档”一个简单的字典。密钥的类型为String,值为enum

以下示例说明了我要做的事情:

import Foundation

enum Friend: String, Codable {
    case Ben, Max
}

let friends: [String: Any] = [ "bestFriend" : Friend.Ben ]
let archivedFriends = NSKeyedArchiver.archivedData(withRootObject: friends)

此代码可以复制到游乐场,结果将是以下错误:

  

错误:执行被中断,原因:信号SIGABRT。

可悲的是,我无法复制堆栈跟踪,所以我不得不创建一个屏幕截图:

Stack Trace

为了测试enum确实是问题,我将代码更改为以下内容:

import Foundation

let friends: [String: Any] = [ "bestFriend" : "Ben" ]
let archivedFriends = NSKeyedArchiver.archivedData(withRootObject: friends)

这样可以解决问题:

我在第一个让NSKeyedArchiver使用给定词典的代码示例中缺少什么?

1 个答案:

答案 0 :(得分:2)

使用原始值而不是直接使用枚举。

let friends: [String: Any] = [ "bestFriend" : Friend.Ben.rawValue]
let archivedFriends = NSKeyedArchiver.archivedData(withRootObject: friends)