利用UserDefault在系统沙盒存储内容,通过JSON编码和解码实现数据的持久存储,每次打开应用进行的操作都会保存下来至本地。
找到沙盒路径
print(NSHomeDirectory())
用command+空格复制路径找到文件夹,打开Library文件夹,再打开Preferences文件夹,打开里面的plist文件,可以看到储存的内容,点击Type可以看到储存的基础类型。
由于是自己定义的Todo类型,所以无法存进plist文件,需转data类型,用json编码,但是Todo类型必须遵从编码和解码的协议。
func saveData(){
//本地存储
do{
let data = try JSONEncoder().encode(todos)
UserDefaults.standard.set(data, forKey: kTodosKey)//由于是Todo类型所以无法存进plist文件,需转data类型,用json编码
}catch{
print("编码错误")
}
}
key为自己定义的
在待办事项的添加修改删除功能中调用储存函数编码储存,在ViewDidLoad()开头调用解码函数解码读取内容。
if let data = UserDefaults.standard.data(forKey: kTodosKey){
if let todos = try? JSONDecoder().decode([Todo].self, from: data){
self.todos = todos
}else{
print("解码失败")
}
}//取数据