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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

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

Q&A

解決済

1回答

442閲覧

onDelete時に対象外のものが削除される。

kazuma1190

総合スコア3

Swift

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

0グッド

0クリップ

投稿2023/02/06 10:27

実現したいこと

onDelete時に対象外のものが削除されるのを解消したい。

前提

削除APIはid(uuid)を受け取るようにしています。

発生している問題・エラーメッセージ

削除対象外のものが削除されている。

該当のソースコード

抜粋しています。

Swift

1func delete(offsets: IndexSet) { 2 let contactId = self.contact[offsets.first!].contact_id 3 deleteAPI(contactId: contactId) 4 self.contact.remove(atOffsets: offsets) 5 }

Swift

1var body: some View { 2 VStack{ 3 NavigationView{ 4 ScrollViewReader { scrollProxy in 5 ZStack { 6 List{ 7 ForEach(kanadata, id: \.self) { kana in 8 let filteredContact = contact.sorted(by: { $0.first_name_kana < $1.first_name_kana }).filter { 9 let first_name_kana = $0.first_name_kana 10 let first_name_kana_prefix = String(first_name_kana.prefix(1)) 11 if let index = kana_table.firstIndex(where: { $0[0].hasPrefix(first_name_kana_prefix) }) { 12 return kana == kana_table[index][1] 13 } 14 return first_name_kana.hasPrefix(kana) 15 } 16 if !filteredContact.isEmpty { 17 Section(header: Text("\(kana)").id(kana)) { 18 ForEach(filteredContact.sorted(by: { $0.first_name_kana < $1.first_name_kana }), id: \.contact_id) {item in 19 VStack { 20 NavigationLink(destination: ContactView(contactId: item.contact_id)){ 21 EmptyView() 22 } 23 .opacity(0) 24 HStack{ 25 Text(item.first_name) 26 Text(item.last_name) 27 Spacer() 28 } 29 } 30 }.onDelete (perform: delete)

Swift

1func deleteAPI(contactId: UUID) { 2 3 print("deletecontact api") 4 let baseURL = UserDefaults.standard.string(forKey: "baseURL") 5 let url = URL(string: "\(baseURL!)/contacts/\(contactId)")! 6 ............................ 7}

試したこと

下記コードが怪しそうでしたので色々修正してみましたが、上手くいきませんでした。

Swift

1let contactId = self.contact[offsets.first!].contact_id

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

hoshi-takanori

2023/02/06 19:16

delete の引数 offsets はセクションごとのインデックスなので、配列全体のインデックスと外れてしまいますね。delete の引数に filteredContact も渡せば良いのでは。
kazuma1190

2023/02/07 01:10

コメントありがとうございます。 申し訳ありませんが、もう少し具体的にお願いしたく存じます。
guest

回答1

0

自己解決

無事に自己解決しました。

投稿2023/02/08 06:30

kazuma1190

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問