使用 Codable 归档
您可以使用Codable 协议和NSKeyedArchiver 来执行此操作。
使您的struct 符合Codable 协议。如果所有struct 的属性也符合Codable,则您无需做任何额外的事情,这对于Int、Double、Stringand others. Even nestedstructs andenum 等基本类型是正确的如果它们自己的属性属于这些基本类型,则它们将是可编码的。
请注意,如果您使用的其他自定义类型不是从符合 Codable 的类继承的,则需要为该类型添加自己的编码键,以便以这种方式存档。
只需在声明中添加协议即可:
struct myStruct: Codable {
var text: String
var isDone: Bool
}
var items = [Int: [myStruct]]()
然后您可以像这样保存项目:
do {
let myData: Data = try NSKeyedArchiver.archivedData(withRootObject: items, requiringSecureCoding: false)
try myData.write(to: fileURL)
} catch {
// Error handling
}
这里fileURL应该是文件系统中某个位置的URL。
您可以像这样加载项目:
do {
let myData = try Data(contentsOf: fileURL)
if let items = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(myData) as? [Int : [myStruct]] {
// Use the data here
}
} catch {
// Error handling
}