ios - 我的应用程序关闭后如何保存结构?
问题描述
我知道有很多方法可以在应用程序关闭后保存数据 - NSCoding、CoreData 和 NSKeyedArchiver 仅举几例 - 但它们都不支持存储自定义结构(对吗?)有什么方法可以存储类似的结构这进入记忆?我想存储items
变量(如果必须的话,还有 myStruct)。
struct myStruct {
var text: String
var isDone: Bool
}
var items = [Int: [myStruct]]()
一如既往地感谢任何帮助!再次感谢!
解决方案
使用 Codable 归档
您可以使用Codable
协议并NSKeyedArchiver
执行此操作。
使您struct
符合Codable
协议。struct
如果所有的属性也符合,则您不必做任何额外的事情,这对于像,Codable
等基本类型是正确的,如果它们自己的属性属于这些基本类型,则 String struct enum`s 将是可编码的。Int
Double
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
}
这里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
}
推荐阅读
- python - 如何在python中将\ 1字符转换为字符串
- postgresql - 根据时间戳范围展开(重复)记录(PostgreSQL)
- python - 在 Python C/C++ 扩展中实现装饰器,可以在 Python 中包装/装饰函数
- python - 识别类参数
- azure - 在 ADF 中连接自托管 IR 时出现问题
- php - 是否可以使用 Symfony 控制台实现并排表格布局?
- c++ - 第一次使用可变参数函数
- python - 如何在numpy数组列中查找数字序列
- node.js - 在共享的 Observable 上引发事件
- html - 如何在将鼠标悬停在其后的元素上时更改元素的 css?