データの保存と読込み

ホームボタンで閉じるだけなら実行が止まるだけなので、再び開くと止まった所から再開する。

スワイプで完全に終了してしまうと内部のデータは全て消えてしまうので、それでも続きから再開したければ、データを保存する必要がある。

保存するデータが少量の場合は、

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に変えたものを用意すれば良い。

 

データの読み込みは初期化の時に読み込めば良い。

データの書出しは?

プログラムを終了する時に書き込めば無駄がないのだけれど、いつ終了されるのかが分からない。

仕方がないので、プログラムのループ毎に書き出すことにする。

大量のデータ保存には向いていない。