我使用struct来填充带有节和行的表视图控制器。现在我需要从表中删除一个单元格。如何找到列表中的元素以将其删除?
STRUCT:
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中删除的元素。
连连呢?谢谢!
答案 0 :(得分:5)
index
的结果始终是Int?
,这意味着它可以是Int
或nil
,但绝不是Bool
(顺便说一句 {{ 1}} 是一种可怕的语法。)
您可能想要这个(as Any as! Bool
数组包含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
),则使用非可选项(不是?
或?
)