NSKeyedArchiver 不会存档以枚举为值的简单字典

NSKeyedArchiver will not archive simple dictionary with enum as value

我正在尝试使用 NSKeyedArchiver 到 "archive" 一个简单的字典。键是 String 类型,值是 enum.

以下示例说明了我正在尝试做的事情:

import Foundation

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

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

可以将此代码复制到 playground 中,结果将出现以下错误:

error: Execution was interrupted, reason: signal SIGABRT.

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

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

import Foundation

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

这行得通,所以问题是:

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

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

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