2017-09-01 17 views
0

構造体を使用して、セクションと行を持つテーブルビューコントローラを作成しています。今私はテーブルからセルを削除する必要があります。それを削除するには、リスト内の要素をどのように見つけることができますか?Swift 3:構造体の配列内のインデックスを検索し、配列からアイテムを削除します。

構造体:

struct Cells { 
    var section: String! 
    var list: [String]! 
} 

セクションと行

var tableStructure = [Cells(section: "Requests", list: ["uidU", "uidV"])] 

コード、構造体に私は、リストから削除する要素を検索するための構造体のリストから項目を削除し、その後、セルを削除するには

let index = tableStructure.index(where: {$0.section == "Requests" && list.index{$0 == cell.selectedUserUid} as Any as! Bool}) 
self.tableStructure.remove(at: index!) //***ERROR HERE*** 
tableView.deleteRows(at: [indexPath], with: .fade) 

エラーメッセージ::テーブルビューから

fatal error: unexpectedly found nil while unwrapping an Optional value 

"cell.selectedUserUid"の内容を見るためにブレークポイントを設定しました。これはstructから削除したい要素と同じです。

提案?ありがとう!

答えて

4

indexの結果は、(as Any as! Boolによって恐ろしい構文です)、それはIntまたはnil決してBoolことができることを意味し、常にInt?です。

あなたは、あなたのデザインCAは

にこの(list配列はUidが含まれています)

tableStructure.index(where: {$0.section == "Requests" && $0.list.contains(cell.selectedUserUid)}) 

安全

if let index = tableStructure.index(where: {$0.section == "Requests" && $0.list.contains(cell.selectedUserUid)}) { 
    self.tableStructure.remove(at: index) 
    tableView.deleteRows(at: [indexPath], with: .fade) 
} 

を記述する必要がありますする必要があり、編集たい場合があります仕事ではありません。あなたは意図されていないセクション全体を削除しようとしています。構造体に突然変異関数を追加するか、クラスを使用してアイテムlistに削除します。その後、対応するindexPathを再作成します。配列が空の場合は、セクションを削除することができます。


重要な注意:

決してinit方法で初期化しようとしている暗黙の開封されたoptionalsとしてクラス/構造体のプロパティ/メンバーを宣言します。オプションで使用する場合は通常のオプション(?)、それ以外の場合は非オプション(?または!

+0

ありがとうございました。私はコードを変更し、コードを使用してアイテムを削除しました。 if let indexStructSection = tableStructure.index(where:{($ 0?.section == "Requests")}){ tableStructure [indexStructSection] ?. list = tableStructure [ indexStructSection]?list?.filter(){$ 0!= cell.selectedUserUid} } – Enzo

関連する問題