我正在尝试使用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。
可悲的是,我无法复制堆栈跟踪,所以我不得不创建一个屏幕截图:
为了测试enum
确实是问题,我将代码更改为以下内容:
import Foundation
let friends: [String: Any] = [ "bestFriend" : "Ben" ]
let archivedFriends = NSKeyedArchiver.archivedData(withRootObject: friends)
这样可以解决问题:
我在第一个让NSKeyedArchiver
使用给定词典的代码示例中缺少什么?
答案 0 :(得分:2)
使用原始值而不是直接使用枚举。
let friends: [String: Any] = [ "bestFriend" : Friend.Ben.rawValue]
let archivedFriends = NSKeyedArchiver.archivedData(withRootObject: friends)