LoginSignup
1
3

More than 1 year has passed since last update.

【SwiftUI】UserDefaultsを使ったデータ保存まとめ

Last updated at Posted at 2021-09-29

UserDefaultsとは

端末にデータを保存することでアプリを閉じた際にもデータを復元することが可能になります。
UserDefaultsを使って端末保存するデータは、

  • 少量(軽量)の情報
  • プライバシー情報を含まない情報

の両方を満たす必要があります。
(両方を満たすデータはUserDefaltsを奨励)

メリット

  • データ操作が容易
  • 短いコードで保存・呼び出しが可能

注意点

UserDefaultsは暗号化されずに端末上に保存されます。
従って、プライバシー情報の保存には向いておりません。
例えば、

  • ニックネーム
  • 性別
  • レベル

などを保存したいときに使うのがおすすめです。

保存できるデータ型

  • Data
  • String
  • Number(Int、Float、Double)
  • Date
  • Array
  • Dictionary
  • Bool

基本的な使い方 (保存・呼び出し・削除)

データを保存する

userDefaults.standard.set(保存する値, forKey: "キー") //データ保存

保存したデータを呼び出す

userDefaults.standard.integer(forKey: "キー") ->  //保存データの呼び出し

保存したデータを削除する

UserDeafaults.standard.removeObject(forKey: "キー") //削除

保存したデータを一括削除する

let appDomain = Bundle.main.bundleIdentifier
UserDefaults.standard.removePersistentDomain(forName: appDomain!) //一括削除

補足:保存データの呼び出し

保存データがない場合に初期値をセットする

let value = userDefaults.standard.string(forKey: "キー") ?? "初期値"

型キャスト

//Int型に変換する。変換した結果がnilの場合、0を代わりににセットする
let value = UserDefaults.standard.object(forKey: "キー") as? Int ?? 0

補足:データを一括管理する

保存データを一括で管理する場合、下記のような構造体を作成します。
データを複数個保存する際は、構造体を使って管理するのが良いでしょう。
didSetは、値の更新時の保存処理を記載しています。

class UserData: ObservableObject {
    /// ニックネーム
    @Published var nickName: String {
        didSet {
            UserDefaults.standard.set(username, forKey: "nickname")
        }
    }
    /// 性別
    @Published var gender: String {
        didSet {
            UserDefaults.standard.set(gender, forKey: "gender")
        }
    } 
    /// 初期化処理
    init() {
        nickname = UserDefaults.standard.string(forKey: "nickname") ?? ""
        gender = UserDefaults.standard.object(forKey: "gender") ?? ""
    }
}
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3