データの保存と読込み
ホームボタンで閉じるだけなら実行が止まるだけなので、再び開くと止まった所から再開する。
スワイプで完全に終了してしまうと内部のデータは全て消えてしまうので、それでも続きから再開したければ、データを保存する必要がある。
保存するデータが少量の場合は、
UserDefaults.standard
に保存するのが簡単。
UserDefaults.standard.set(val, forKey: "data")
とすれば、valの値が"data"という名前で保存される。
valの型はなんでも良い。
これを読み出すときは、
UserDefaults.standard.object(forKey: "data")
なのだけれど、値が保存されていない時、nilが返される。
そのため、直接valに代入しようとすると、値がないときはエラーとなってしまう。
そこで、こんな関数を用意してみる。
func readInt(key : String,org : Int) -> Int{
if UserDefaults.standard.object(forKey: key) != nil{
return UserDefaults.standard.object(forKey: key) as! Int
}else{
return org
}
}
そして
val = readInt(key: "data", org: 0)
として読み込む。
つまり、"data"という名前がついた値があるか、あればその値をIntとして読み込んで返す。
この関数はInt型のデータ読み込み専用である。
そして、値がなければ、orgで指定した値がvalに代入される。
他の方の値を読み込むには、その型用の関数をつくる。
String型のデータを読み込むなら、上記の関数のIntをStringに変えたものを用意すれば良い。
データの読み込みは初期化の時に読み込めば良い。
データの書出しは?
プログラムを終了する時に書き込めば無駄がないのだけれど、いつ終了されるのかが分からない。
仕方がないので、プログラムのループ毎に書き出すことにする。
大量のデータ保存には向いていない。