我在ios中有一个表,我希望从一个数组中选择的项追加到另一个数组,但是当我尝试时,出现错误Cannot subscript a value of type '[VintageThings]' with an index of type 'IndexPath'
这是给我错误的代码,我尝试查找如何执行此操作,但是所有答案似乎都与array = ["dog","cat"]
等单层数组有关。请帮助我解决这个问题。 / p>
var selected: [VintageThings] = []
func tableView(tableView: UITableView, didSelectRowAt IndexPath: IndexPath) {
selected.append(newArray[indexPath])
}
编辑
如何获取selected
数组以锁定多个场景中的项目并在以后的场景中使用?我是否必须在外部swift文件中设置阵列?我不知道是否有项目保存在其中。
答案 0 :(得分:0)
IndexPath由两个索引组成。您想要的是indexPath.row
。
这是因为TableView也可以分为几部分。而且,如果用户在给定部分中轻按一项,则您想知道哪一项。这就是为什么IndexPath具有第二个索引indexPath.section
。
要再次将其从数组中删除,您必须使用相同的方法(类似切换行为)
let element = newArray[indexPath.row];
if selected.contains(element) {
selected = selected.filter {$0 = element}
} else {
selected.append(element)
}
答案 1 :(得分:0)
将其更新为indexPath.row以使其正常运行。在这里更新了代码
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selected.append(newArray[indexPath.row])
}
会的。
编辑
要从阵列中删除对象,可以首先检查所选对象中是否存在对象。如果是,则检查对象的索引并从中删除对象。这是可以做到的。
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
let selectedObj = newArray[indexPath.row]
if selected.contains(selectedObj) {
if let indexOfSelectedObject = selected.index(of: selectedObj) {
selected.remove(at: indexOfSelectedObject)
}
}
}