Userdefaultsの復習
UserDefaultsのインスタンスの生成
まずはUserDefaulsのインスタンスをクラスの上部で作成します
var userDefaults = UserDefaults.standard
データを保存する
次にデータを保存します.
UserDefaultsはInt
, String型
, 配列
, Date型
, Float型
, Double型
の保存に対応していて、保存の方法は全て同じです.
今回はnames
という配列を保存します.
userDefaults.set(names, forKey: "キー")
データを取り出す
次にデータを読み出してみます.
取り出す場合は取り出す変数の型により取り出し方が異なります.
Int型
let number = userDefaults.integer(forKey: "キー")
String型
let name = userDefaults.string(forKey: "キー")
配列
let names = userDefaults.array(forKey: "キー")
Date型
let date = userDefaults.object(forKey: "キー") as? Date
配列を保存する場合の注意
配列をUserDefaultsを使って保存する場合を考えてみます.
このような場合、そのまま保存して良いのでしょうか?
違いますね
配列に保存する場合は、事前に保存されているデータを読み込んでからそこに追加をして、保存する必要があります.
そうしないと、毎回データを上書きしてしまい、一向に追加して保存されません.
保存する
names
というString型の配列に変数name
を保存する場合を考えてみます.
まず保存してあるかどうかを判別し、保存してあれば中身を取り出します.
var names = userDefaults.array("キー") as? [String] ?? []
上で使用している??
は、保存されたデータがない場合にnames
に空の配列を代入させるために使用しています.
次に実際にnames
に新たなデータを追加して保存していきます.
names.append(name)
userDefaults.set(names, forKey: "キー")
配列に変数を新たに追加する場合はappend
というメソッドを使用します.
上記をまとめるとこんな感じです.
var names = userDefaults.array("キー") as? [String] ?? []
names.append(name)
userDefaults.set(names, forKey: "キー")
取り出す場合
取り出す場合は特に留意する点はありませんが、userDefaults
で取り出す値はどれもオプショナル型になっているため、同じように??
演算子を使用します
let names = userDefauls.array("キー") as [String] ?? []
最後に
初めてUserDefaultsで配列の保存や取り出しを行う際に、うまく保存できずにつまづいた経験があったので共有しました.