我知道关闭应用程序后,有很多方法可以保存数据-NSCoding,CoreData和NSKeyedArchiver仅举几例-但它们都不支持存储自定义结构(对吗?)我可以存储任何方法吗?这样的结构进入内存?我想存储items
变量(如果需要,还可以存储myStruct)。
struct myStruct {
var text: String
var isDone: Bool
}
var items = [Int: [myStruct]]()
任何帮助一如既往!再次感谢!
答案 0 :(得分:-1)
CoreData实际上确实支持自定义结构。唯一的限制是,这些结构中允许的唯一数据类型是原始的NSData
。但是,这很容易克服,因为很容易将您的任何自定义对象编码为NSData
对象。
答案 1 :(得分:-1)
您可以使用Codable
协议和NSKeyedArchiver
来执行此操作。
使您的struct
符合Codable
协议。如果所有struct
的属性也都符合Codable
,则无需做任何额外的操作,对于Int
,Double
,String {{ 1}} struct and others. Even nested
枚举如果它们自己的属性属于这些基本类型,则将是可编码的。
请注意,如果您使用的其他自定义类型不是从符合s and
的类中继承的,则需要为该类型添加自己的编码键,以便可以通过这种方式对其进行归档。
只需将协议添加到声明中:
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
}
应该是文件系统中某个位置的URL。
您可以这样加载项目:
fileURL