Swift勉強メモ
NSCoderを使ったデータのエンコード、デコードについて。(作っているアプリはTodoリスト)
インデントのずれはめんどいので無視。
データはplistで保存される。
var itemArray = [Item]()
let dataFilePath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent("Items.plist")
エンコード
// Todoリストにアイテムを追加ボタンが押された後の流れ。
let newItem = Item()
newItem.title = textField.text!
//配列に新しいTodoリストを追加
self.itemArray.append(newItem)
//saveItemsメソッドでデータをエンコードしてplistに保存する。
self.saveItems()
}
func saveItems() {
let encoder = PropertyListEncoder()
do {
let data = try encoder.encode(itemArray)
try data.write(to: dataFilePath!)
} catch {
print("Error encoding item array, \(error)")
}
tableView.reloadData()
}
デコード
override func viewDidLoad() {
super.viewDidLoad()
loadItems()
}
func loadItems() {
if let data = try? Data(contentsOf: dataFilePath!) {
let decoder = PropertyListDecoder()
do {
itemArray = try decoder.decode([Item].self, from: data)
} catch {
print("Error decoding items")
}
}
}