💾

SwiftUI 構造体をUserDefaultsに保存する。

2024/04/10に公開

やること

Struct構造体をUserdefaultsに保存する。

筆者の開発環境

Mac os Sonoma 14.3.1
Xcode 15.3

Userdefaultsとは?

Userdefaultsはキーと値のペアを永続的に保存します。

作成した構造体をそのまま保存はできない

自分はTodoListアプリを作成していたときなんですが自作した以下の構造体をそのまま
Userdefaultsに保存しようとしてました。

import Foundation

struct TodoModel: Codable, Identifiable {
    var id = UUID()
    var Tag: String
    var Title: String
    var Details: String
    var Check: Bool
}

ですが、これでは保存できません。

構造体をUserdefaultsに保存する

保存するためにはData型に変換してから保存しないといけません。

保存

if let encodedData = try? JSONEncoder().encode(TodoList) {
    UserDefaults.standard.set(encodedData, forKey: "TodoList_Key")
}

呼び出し

取得する場合は、UserDefaultsからData型として取得し、自作した構造体に変換し直せば良いです。

if let todosData = UserDefaults.standard.data(forKey: "TodoList_Key"),
   let decodedTodos = try? JSONDecoder().decode([TodoModel].self, from: todosData) {
    TodoList = decodedTodos
}

参考記事

https://qiita.com/taro-ken/items/8bdbc86c53452a443c85

最後まで読んでいただきありがとうございました。

Discussion