SwiftでUserDefaultsを利用すると、今回起動時のデータを記録して、次回起動時にそれを読み込んで利用することができます。
読み込むタイミングは、アプリ起動時か、前回のデータを利用したいViewのロード時になるかと思います。
保存するタイミングは、アプリ終了時か、Viewの終了時になるかと思います。
また一番最初には保存したデータがないので、ものによってはnilが返されますので、その場合どうするかを考えておかないと行きません。
サンプルでは、nilの時は空文字列や、空の配列などをセットするようにしています。
class ViewController: UIViewController {
//UserDefaultsのインスタンスをここで取得しておく
let ud: UserDefaults = UserDefaults.standard
var udData01: String = ""
var udData02: Int = 0
var udData03: [String] = []
var udData04: [String : Int] = [:]
var udData05: [UIColor]? = []
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//UserDefaultsより読み込む
loadUserDefaults()
//データの書き換え
changeData()
//UserDefaultsを書き込む
saveUserDefaults()
}
//UserDefaultsより読み込むメソッド
func loadUserDefaults() {
//文字列
udData01 = ud.string(forKey: "01") ?? ""
//数値データ
udData02 = ud.integer(forKey: "02")
//配列
udData03 = ud.array(forKey: "03") as? [String] ?? []
//辞書型
udData04 = ud.dictionary(forKey: "04") as? [String:Int] ?? [:]
//そのままではUserDefaultsに保存できない型
var arData: [Data]? = []
arData = ud.array(forKey: "myColors") as? [Data]
self.udData05?.removeAll()
self.udData05 = []
for i in 0 ..< 20 {
if let data = arData?[i] {
//ここでUIColorに戻しています。
let localColor: UIColor = NSKeyedUnarchiver.unarchiveObject(with: data) as! UIColor
self.udData05!.append(localColor)
}
}
}
//UserDefaultsに書き込むメソッド
func saveUserDefaults() {
//保存は基本の型のは同じ構文
ud.set(udData01, forKey: "01")
ud.set(udData02, forKey: "02")
ud.set(udData03, forKey: "03")
ud.set(udData04, forKey: "04")
//そのままではUserDefaultsに保存できない型
var arData: [Data] = []
for i in 0 ..< 20 {
//ここでUserDefaultsに保存できるように変換しています。
let localData: Data = NSKeyedArchiver.archivedData(withRootObject: self.udData5![i])
arData.append(localData)
}
ud.set(arData, forKey: "myColors")
}
//データを書き換えるメソッド
func changeData() {
udData01 = "ABC"
udData02 = 100
udData03 = ["abc", "DEF", "GHI", "JKL"]
udData04["a"] = 20
udData04["b"] = -30
udData04["z"] = -10000
}
}
