背景
ちょっとしたデータの保存がしたいとき、RealmやCoreDataを使うほどではないというとき、UserDefaults使うと思います。そんなUserDefaultsで初期値がなくてnilだと困るなんて思ったことありませんか? 初期値の設定、簡単にできます。
ソースコード
class hope: superhoge {
let userDefaults = UserDefaults.standard
init() {
super.init()
//ディクショナリ形式で初期値を指定できる
userDefaults.register(defaults: ["UserName" : "NoName",
"UserID" : 315,
"Flag" : false])
//値を取り出す
let name = userDefaults.object(forKey: "UserName") as! String
let id = userDefaults.integer(forKey: "UserID")
let flag = userDefaults.bool(forKey: "Flag")
}
}
解説
値を取り出す前に.register()
メソッドを用いることで初期値を指定することができます。この初期値の特性は
- 一度も利用されていない(保存されていない)Keyのデータに適応される
- 値がすでに入っているときはそちらを優先し、初期値は無視される
という風になっており便利です。
初期値の指定をしない場合、UserDefaultsではそのデータ型の基本値(Intなら0、Boolならfalse)が初回の呼び出しで取得できます。しかし、例えばInt型で50~100の間の数以外はエラーになってしまうから初期値を50にしたいなどの状況があると思います。そういう時にぜひ.register()
使ってみてください。