我正在尝试在我的应用中添加功能,一次将多个成员添加到一个操作中。成员列在tableView
中,并且用户可以使用.allowsMultipleSelection = true
函数一次选择多个行。我得到了以下代码,但这不起作用。我认为我的想法行得通,但不能以我在代码中的方式实现:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let destination = segue.destination as? AddMultipleMemberTransactionViewController,
let selectedRows = multipleMemberTableView.indexPathsForSelectedRows else {
return
}
destination.members = members[selectedRows]
}
这里有人知道我如何解决此问题,因为有错误:
不能用索引为[[IndexPath]”的下标“ [Member?]”的值
我在应用程序中具有相同的功能,但仅适用于一位成员。在selectedRows
行之后的let indexPathForSelectedRow
行中有我。 indexPathsForSelectedRows
有类似的功能吗?
还是这是错误的方法?
答案 0 :(得分:1)
您需要
destination.members = selectedRows.map{ members[$0.row] }
答案 1 :(得分:1)
如indexPathsForSelectedRows所示,它返回一个IndexPath数组。您需要做的就是基于这些路径创建一个Member对象数组。
假设您有一个“成员”数组,其中包含用户可以选择的所有成员,并且表中只有1个部分:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
var selectedMembers: [Member] = []
guard let destination = segue.destination as? AddMultipleMemberTransactionViewController,
let selectedIndexes = multipleMemberTableView.indexPathsForSelectedRows else {
return
}
for selectedIndex in selectedIndexes {
let selectedMember = members[selectedIndex.row]
selectedMembers.append(selectedMember)
}
destination.members = selectedMembers
}
您还可以使用数组map()函数将for循环更改为单行操作:
let selectedMembers: [Member] = selectedRows.map{ members[$0.row] }
两者都应该有效地做同样的事情。