我有一个多选的允许表。第一次用户选择一些行。第二次用户来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
答案 0 :(得分:2)
您正在数组索引超出范围错误,因为您尝试插入 离散 索引(更像是跳过中间索引。但它不能这样工作。你不能拥有像["a", "b", _ , _ , "g", "u", _ , _ , "y"]
这样的数组
让我们做一件事。你保持counter
var,在counter
的位置插入,然后递增该计数器。类似的东西:
var counter: Int = 0
...
groupSelectedOldPrice.insert("your string" at:counter)
counter = counter +1
...
修改强>
(根据你的要求回答)
要达到您的要求,您可以维持Dictionary
。 Dictionary
key
将indexpath.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)