如何在空数组中的任何位置插入新项?

时间:2017-04-27 15:44:42

标签: arrays swift uitableview swift3

我有一个多选的允许表。第一次用户选择一些行。第二次用户来beck这个页面取消选择某一行,可以选择某行或不行。但我需要保留以前选定的行。那一行显示价格。所以我需要跟踪价格,这是我正在跟踪的表格视图选择行的原因。

这里我的声明数组为空:

 var groupSelectedOldPrice : [String] = []

这是我的表格行选择的索引项目价格附加到数组:

 if  addon?.isSelect == true {
     cell.accessoryType = .checkmark
      groupSelectedOldPrice[indexPath.row] = (addon?.price)! // Index out of range
 }

当用户按完成按钮时:

        let selectedUserRows = self.tableView.indexPathsForSelectedRows

        if let _selectedUserRows = selectedUserRows  {

            for select in _selectedUserRows {
              print(select.row)
              let dishprice =  Double((dish?.price)!)! - Double(groupSelectedOldPrice[select.row])!
              dish?.price = "\(dishprice)"
         }
      }

我不确定如何才能实现这一目标。我应该使用字典key value

2 个答案:

答案 0 :(得分:2)

您正在数组索引超出范围错误,因为您尝试插入 离散 索引(更像是跳过中间索引。但它不能这样工作。你不能拥有像["a", "b", _ , _ , "g", "u", _ , _ , "y"]这样的数组

让我们做一件事。你保持counter var,在counter的位置插入,然后递增该计数器。类似的东西:

var counter: Int = 0
...
groupSelectedOldPrice.insert("your string" at:counter)
counter = counter +1
...

修改

(根据你的要求回答)

要达到您的要求,您可以维持DictionaryDictionary keyindexpath.row value String var dic: [Int:String] = [:] // it's your declaration .... .... dic[indexpath.row] = "your string" // when you try to fill your dictionary {{1}}。非常像:

{{1}}

答案 1 :(得分:0)

您可以将元素插入数组的特定索引

let index = 1
yourArray.insert("Your String", at: index)