swift持久化存储轻量数据

做个简单的记事本,效果如下:

主要使用UserDefaults(以前是NSUserDefaults)实现数据的持久化,将Array数据存储在沙盒里。

直接使用

1
2
3
4
func syncStore(){
UserDefaults.standard.set(objects, forKey: "history")
UserDefaults.standard.synchronize()
}

存数据。

读取数据使用

1
objects = UserDefaults.standard.value(forKey: "history") as! Array<Any>

在第一次启动的时候读数据会出错,因此需要判断是否为第一次启动,如果是第一次启动则需要初始化存储结构。

1
2
3
4
5
6
7
let isFirstLaunch = UserDefaults.standard.string(forKey: "FirstLaunch") == nil
if(isFirstLaunch){
UserDefaults.standard.set("false", forKey: "FirstLaunch")
syncStore()
}else{
objects = UserDefaults.standard.value(forKey: "history") as! Array<Any>
}

插入数据的function:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
func insertNewObject(_ sender: Any) {
let alertController = UIAlertController(
title: "添加备忘",
message: "请输入备忘内容",
preferredStyle: UIAlertControllerStyle.alert)
let insertAction = UIAlertAction(
title: "确认",
style: .default,
handler: {
(action: UIAlertAction) -> Void in
print(alertController.textFields![0].text!)
self.objects.insert(alertController.textFields![0].text!, at: 0)
let indexPath = IndexPath(row: 0, section: 0)
self.tableView.insertRows(at: [indexPath], with: .automatic)
self.syncStore()
})
let cancelAction = UIAlertAction(title: "取消", style: .cancel)
alertController.addTextField { (textField:UITextField) in
textField.placeholder = "请输入内容"
}
alertController.addAction(insertAction)
alertController.addAction(cancelAction)
self.present(alertController, animated: true, completion: nil)
}