【问题标题】:How to insert new item in empty array any position?如何在空数组的任何位置插入新项目?
【发布时间】:2017-09-25 12:25:47
【问题描述】:

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

这里我的声明数组是空的:

 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 使用字典吗?

【问题讨论】:

  • 基本上你不能插入带有索引订阅的项目。您必须使用appendinsert。此外,我建议使用带有 isSelected 属性的自定义结构作为模型。
  • @vadian 你能给struct举个例子吗?
  • @iOSDeveloper cmets 是回答连续性问题的错误场所。请换一个新的。
  • ok vadian 如果我问我会把链接发给你....
  • 我也有这个问题!为什么我不能给数组一个长度,然后将项目放在我想要的位置和时间。 Java 会这样做。

标签: arrays swift uitableview swift3


【解决方案1】:

您收到 Array index is out of range 错误,因为您尝试在 discrete 索引处插入(更像是 skipping 中间索引。但它不能这样工作。你不能有像["a", "b", _ , _ , "g", "u", _ , _ , "y"]这样的数组

让我们做一件事。您维护一个counter var,在counter 的位置插入,然后增加该计数器。比如:

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

编辑

(根据您的要求回答)

为了满足您的要求,您可以维护一个DictionaryDictionary 其中key 将是您的indexpath.rowvalue 将是您的String。很像:

var dic: [Int:String] = [:] // it's your declaration
....
....
dic[indexpath.row] = "your string" // when you try to fill your dictionary

【讨论】:

  • 我想知道如何归档这个 yourArray.insert("Your String", at: 7) 。其中数组为空。有没有其他选择。
  • 查看我最近的编辑。不,这是不可能的。插入nth 索引时,您不能跳过第 3 或第 6 或任何索引。
  • 你知道实现我的目标的任何替代方法吗?根据我的问题
  • Dictionary 将非常适合您的情况,但不是最好的。正如@vadian 在评论中建议的那样,您应该使用自定义结构。
  • 至少如果你给我提示或链接来学习为什么不是最好的字典?我会接受你的回答并投票。
【解决方案2】:

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

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

【讨论】:

  • @vadian 可以工作吗yourArray.insert("Your String", at: 7)?其中数组为空。因为我不确定哪个用户选择了
  • 不,它没有。如果索引
  • @NazmulHasan 既然您使用的是UITableView,为什么不使用tableView.indexPathsForSelectedRows 来获取所有选定的行?
猜你喜欢
  • 1970-01-01
  • 2018-03-13
  • 2018-07-21
  • 2021-10-09
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
相关资源
最近更新 更多