indexPathForSelectedRow

indexPathForSelectedRow

长话短说,我正在重温一个老项目,只是喜欢一个关于indexPathForSelectedRow的解释!
基本上,我的初始表视图显示了值1、2或3,类似于这个数组。

var array1 = ["1", "2", "3"]

一旦用户选择1、2或3,它们将被分割到第二个表视图,显示相应嵌套数组的值。
var array 2 = [["11", "12"], ["25", "27"], ["36", "39"]]

例如,如果用户在第一个表视图中选择了2,则它们将被带到包含25和27的值的第二个表中。
这是用这个代码完成的
if let destViewController = segue.destinationViewController as? RestaurantNameTable {
let indexPath = self.tableView.indexPathForSelectedRow!
destViewController.selectedRestaurants = array2[indexPath.section]

这是我的困惑。
我知道indexPathForSelectedRow指的是一个部分和行。
但是,在选择第一个数组时,没有节,只有3行。那么,为什么使用数组1的nsindexpathfoselectedrow(即3行)仍然引用数组2中正确的节/数组呢?特别是如果我指的是第2条?
换言之,如果我在数组1中选择任何行,我就没有节。。。。当所有indexpath都是一行#时,我怎么能说array2部分是indexpath的=呢?
除非我的理解有缺陷,否则在array1中选择“2”的部分是0,行是1,但是array2的内容“25”和“27”的部分是1?这个逻辑是如何工作的?
如果你想要这个问题的新措辞,请问。我自己也不好过,哈哈。
不管怎样,谢谢你的寻找和帮助!

最佳答案

区段号并不反映区段的数目,它只是分配给它的id。因此,对于array1,节是0,因为第一个节始终被指定为0,除非您另外设置它。与数组类似,数组的第一个索引是0,第一个部分是0。
所以我相信你面对的问题是,阵列1是一个一维的阵列。这意味着,对于一维数组(如array1),当您使用“indexPathForSelectedRow”时,它将在主数组中查找第0个数组(第0节),然后尝试从该内部数组检索行。因此,它根本找不到数组,因为没有数组(因为它是一维的)。所以如果你这样做了(把原来的数组放在另一个数组中):

let array1 = [["1", "2", "3"]]

然后这样做:
if let destViewController = segue.destinationViewController as? RestaurantNameTable {
let indexPath = self.tableView.indexPathForSelectedRow!
destViewController.selectedRestaurants = array2[indexPath.section]

那么它的工作原理和array2完全一样。因为它正在抓取第0个数组(第0节),然后抓取绑定到所选索引路径的正确行。

10-07 18:34