質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

441閲覧

[SwiftUI] データを削除したら、画面上からもデータを消したい

Natsu.mikan

総合スコア6

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/03/18 10:53

一覧画面にはFirestoreから取得してきたデータがが表示されており、詳細画面には削除ボタンがあります。

詳細画面に遷移し、削除ボタンをクリックして一覧画面に戻ったときに、
一覧画面から削除したデータを消したいです。
いろいろ試してみましたが、実現できなかったため、お力をお借りしたいです。

SwiftUI

1struct ListView: View { 2 @ObservedObject var fetcher = DataFetcher() 3 4 var body: some View { 5 NavigationView { 6 VStack { 7 ForEach(self.fetcher.listData.indices, id: .self) { i in 8 NavigationLink( 9 destination: DetailView(data: self.fetcher.listData[i]) 10 ) { 11 Text(self.fetcher.listData[i].name) 12 } 13 } 14 } 15 } 16 } 17} 18 19struct DetailView: View { 20 var data: DataModel 21 22 var body: some View { 23 VStack { 24 Text(self.data.name) 25 26 Button("Delete") { 27 self.deleteData(data: self.data) // Here, the corresponding data is deleted from the database. 28 } 29 } 30 } 31} 32 33class DataFetcher: ObservableObject { 34 @Published var data: [DataModel] = [] 35 private var db: Firestore! 36 37 init() { 38 db = Firestore.firestore() 39 fetchData() 40 } 41 42 private func fetchData() { 43 self.db.collection("data").getDocuments { (snaps, err) in 44 if let err = err { 45 print("Error getting documents: (err)") 46 } 47 48 guard let snaps = snaps else { return } 49 50 for document in snaps.documents { 51 self.data.append(DataModel( 52 id: document.data()["id"] as! String, 53 name: document.data()["name"] as! String 54 )) 55 } 56 } 57 } 58}

protocolなどを使い、削除ボタンをクリックしたタイミングでListViewにあるfunctionを呼び出して削除してみましたが、詳細画面に表示されていたデータが、次のデータに切り替わってしまいました。

SwiftUI

1func deleteData(data: DataModel) { 2 if let index: Int = self.fetcher.data.index(where: {$0.id==data.id}) { 3 self.fetcher.data.remove(at: index) 4 } 5}

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問