##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") ?? ""
}
}