見出し画像

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

リストに追加していくことができるようになり再起動してもデータが残るようにもできました。次はいらないものを削除できるようししていきます。

今のリストは

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

で表示させていますが、削除の機能をつけるには削除のメソッドを持つ"forEarch"を使います。

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

これにモディファイアをつけてリストを削除できるようにします。

List{
       ForEach(todoList,id:\.self){todoData in
             Text(todoData) 
    }.onDelete{ IndexSet in
          self.todoList.remove(atOffsets: IndexSet)
    }
}

.onDelete{ IndexSet in
  self.todoList.remove(atOffsets: IndexSet)
}

.onDeleteを使うと削除できるようになります。

次にリストを移動できるような仕組みを作ります。

.onMoveを使います。

.onMove{(IndexSet,Destination) in
       self.todoList.move(fromOffsets: IndexSet, toOffset: Destination)
 }

のようにします。

後は"EditButton()"の設置が必須です。これがないと移動はできません。

全体としては

List{
                ForEach(todoList,id:\.self){todoData in
                    Text(todoData)
                }.onDelete{ IndexSet in
                    self.todoList.remove(atOffsets: IndexSet)
                 
                }.onMove{(IndexSet,Destination) in
                    self.todoList.move(fromOffsets: IndexSet, toOffset: Destination)
                 
                }
            }

これで削除と移動ができるようになりました。最後にこの状態を維持するために保存するようにします。

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

.onDelete、.onMoveの命令にくっつけます。

.onDelete{ IndexSet in
   self.todoList.remove(atOffsets: IndexSet)
   UserDefaults.standard.set(self.todoList,forKey: "todoSave")
}.onMove{(IndexSet,Destination) in
   self.todoList.move(fromOffsets: IndexSet, toOffset: Destination)
   UserDefaults.standard.set(self.todoList,forKey: "todoSave")
}

とすれば保存できるようになります。

後は入力する時に何も入れずに登録しようとするとアラートを出して入力できないようにします。

変数宣言します。

@State var isAlert = false

アラートを出す仕組みを作ります。変数宣言した"iaAlert"が"True"になった場合にアラートを出すようにします。コードとしては

.alert("入力をしてください", isPresented: $isAlert){}

とすれば、"iaAlert"が"True"になった場合にアラートが出るようになります。この操作は全体に影響させたいので、

VStack{}の直下、".onApear()"と同じ芭蕉に書きます。

後は、"iaAlert"が"True"になるタイミングを作ります。この場合は"add"ボタンを押したタイミングで空欄であればアラートを出したいので

Button(action: {    
         if todo == ""{
            isAlert.toggle()
          }else{         
            self.todoList.append(self.todo)
             UserDefaults.standard.set(self.todoList,forKey: "todoSave")
             self.todo = ""
           }
})

if todo == ""{
   isAlert.toggle()
}

.toggle()falsetrueに変えてやります。

空欄であれば、falseになりアラートが出ることになります。入力されるとelse{}が実行され保存されることになります。

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