見出し画像

Swiftでアプリ。- Todoリスト! 3

入力してリスト表示させることができたのですがアプリを終了させるとデータは消えてしまいます。

これを保存する仕組みを作っていきます。保存する方法としてはAppleのフレームワークとして

UserDefaults

Core Data

後は

Realm

がよく使われているのではないでしょうか。

保存するデータが少ない場合はお手軽な"UserDefaults"を使うことができます。

Todoアプリを保存できるように"UserDefaults"を使って実装します。

保存する基本形は

userDefaults.standard.set(値, forKey: "キー")

となります。今回の場合はボタンを押したタイミングで保存したいので

Button(action: {        
         self.todoList.append(self.todo)

         UserDefaults.standard.set(self.todoList,forKey: "todoSave")

         self.todo = ""         
 }){
  ZStack{
         RoundedRectangle(cornerRadius: 5)
            .frame(width: 50,height: 30)
         Text("add")
            .foregroundColor(.white)
    }
 }

UserDefaults.standard.set(self.todoList,forKey: "todoSave")

保存する値が入っている変数"todoList"、保存するキーワードは"todoSave"としています。

後は、アプリが起動した時に保存した値を"todoSave"のキーワードで保存した値を"todoList"に戻します。

その時使うのが、" .onAppear()"です。起動後すぐに呼び出されるので、ここで保存したものを読み込みます。

List( todoList,id:\.self){todoData in
        Text(todoData)
 }
    .onAppear(){
        guard let defo = UserDefaults.standard.array(forKey: "todoSave") as? [String]
               else {return}
     self.todoList = defo
     }

UserDefaults.standard.array(forKey: "todoSave") as? [String]

"todoList"は配列なので、"array"がついています。変数defoに一旦入れておいて

 self.todoList = defo

変数"todoList"に戻します。そうしたものを

List( todoList,id:\.self){todoData in
        Text(todoData)
 }

そうすると、保存されたものを読み込んででリスト表示します。


ここでSwiftUIで追加された"@AppStorage"のご紹介。基本的には"UserDefaults"です。プロパティラッパーという仕組みを使い簡単に使えるようになっています。

使い方は簡単で、@AppStorageをつけて変数宣言するだけです。

 @AppStorage("IntegerKey") var counter = 0

これで変数"counter"に入っていくデータを保存、永続化します。


今のところ配列や辞書など対応していないので今回のTodoアプリのように配列で保存していくようなものに着いては"UserDefaults"と同じように使うことはできません。

この記事が気に入ったらサポートをしてみませんか?