序列化自定义词典
更新:新的Swift 4过度简化了此过程, 请查看如何
通过Swift 字典和NSDictionary编码之间的自动桥接,更常见的String到Object字典非常简单。 但是,当我们想使用任意对象作为键时,情况会发生变化。
常规词典仅对键类型强制实施可哈希和等价协议。 如果我们要构建持久性类,则可以从NSObject继承这些属性。 另外,我们需要实现NSCoding进行序列化。
类项目:NSObject,NSCoding {...}各种数量:[Item:Int]
使用NSKeyedArchiver保存该对象的方式应为:
让_ = NSKeyedArchiver.archiveRootObject(self,toFile:file)
但是,当尝试还原实例时,会发生一个模糊的错误:
让restore = NSKeyedUnarchiver.unarchiveObject(withFile:file) //例外:[MyClassName copyWithZone:]无法识别的选择器发送到实例
事实证明,由于某种原因,NSDictionary还要求密钥类型符合NSCopying。 一个简单的实现可以解决:
类项目:NSObject,NSCoding,NSCopying { func copy(with zone:NSZone?= nil)->任何{ 返回项目(名称:名称,库存:库存) } ...
这是一个完整的工作示例: