如何从使用结构制作的数组中追加项目?

时间:2018-07-13 07:18:40

标签: ios arrays swift4

我在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文件中设置阵列?我不知道是否有项目保存在其中。

2 个答案:

答案 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)
        }
    }
}