【Swift】構造体の配列をUserDefaultで保存・読み込みする

PlayGroundで実行すると中身が逐次確認できて良い。

データの用意

//データの作成
let hogeKey = "hoge"

struct Person: Codable {
    var name: String
    var message: String
}

var some_person: [Person] = [
        Person(name: "John", message:"hello"),
        Person(name: "Kaiky", message:"hi!!"),
]

保存とロード

//保存
func savePerson(persons: [Person]) {
    let jsonEncoder = JSONEncoder()
    guard let data = try? jsonEncoder.encode(persons) else {
        return
    }
    UserDefaults.standard.set(data, forKey: hogeKey)
}

//読み込み
func loadPerson() -> [Person]? {
    let jsonDecoder = JSONDecoder()
    guard let data = UserDefaults.standard.data(forKey: hogeKey),
          let persons = try? jsonDecoder.decode([Person].self, from: data) else {
        return nil
    }
        
    return persons
}

テスト

//テスト
savePerson(persons: some_person)

var loaded_person = loadPerson()

//要素追加
loaded_person?.append(Person(name: "Grand", message: "I am new.."))

savePerson(persons: loaded_person!)

loadPerson()

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog