indexpath.row是否负责迭代数组?

时间:2018-04-30 19:39:47

标签: ios swift nsindexpath

我正在完成UITableView教程,并且在实施UITableViewDataSource方法时,我对数组迭代感到好奇。当我们调用indexPath.row时,这是否在幕后为我们调用for循环?我问,因为几个月前我正在学习使用网络服务中的数据(我已经忘记了我如何精确地完成它的确切步骤)但我相信我需要迭代数组才能呈现控制台中的信息。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // Create an instance of UITableViewCell, with default appearance
        let cell = UITableViewCell.init(style: .value1, reuseIdentifier: "UITableViewCell")

        // Set the text on the cell with the description of the item instance that is at the nth index of the allItems array, where n = row this cell will appear in on the tableview
        let item = itemStore.allItems[indexPath.row]

        cell.textLabel?.text = item.name
        cell.detailTextLabel?.text = "$\(item.valueInDollars)"

        return cell
    }

我认为indexPath.row方法在幕后为我们迭代数组是否正确?

let item = itemStore.allItems[indexPath.row]

4 个答案:

答案 0 :(得分:3)

不,调用indexPath.row不会为您迭代所有行。它只是发送到cellForRowAt的变量,您可以访问并使用它来创建您的单元格。它包含有关函数cellForRowAt被调用的部分中哪一行的信息。

但是,每次在 tableVIew 上显示一个单元格时,都会调用cellForRowAt。想象一下,您有一个包含100个项目的 dataSource ,并且一次只能看到10个单元格。最初加载 tableView 时,cellForRowAt将被调用10次。然后,如果您滚动 tableView 以显示另外3个单元格,cellForRowAt将再次被调用3次。

答案 1 :(得分:1)

没有。 indexPath只是一个包含sectionrow的结构。您可以使用它们直接从阵列中查找信息。没有迭代发生。

cellForRowAt仅针对屏幕上的单元格调用,因此调用它们的顺序取决于您正在滚动的方向。

事实上,UITableView甚至不知道您是在使用数组,还是在运行中生成信息。您对indexPath rowsection所做的工作取决于您。

答案 2 :(得分:1)

首先,教程似乎非常糟糕。表视图单元应该被重用

let cell = tableView.dequeueReusableCell(withIdentifier: "UITableViewCell", for: indexPath)

显示表格视图单元格的工作流程为:

  • 框架调用numberOfRowsInSection(以及numberOfSections
  • 对于可见单元格范围内的每个部分/行对,它调用cellForRowAt并在第二个参数中传递索引路径。

答案 3 :(得分:1)

查看UITableView和cellForRowAtIndexpath函数的文档。

  

在tableView中定位行的索引路径。

IndexPath将是一个结构,它可以帮助您从嵌套数组中获取特定位置。在您的表视图的情况下,该部分内的行。

cellForRow将返回特定索引路径的单元格(在指定的部分和行中)

因此indexPath.section将给出要修改单元格并返回到数据源的节号。在部分内部,indexPath.row将是该部分内的相应行。

index path documentation

tableView-CellForRowAt: IndexPath

UITableView DataSource Documentation

[更新]

如果要添加多个部分,请添加另一个dataSource numberOfSections,并从中返回计数的部分数。

我可以链接到Apple的create a table view tutorial,但这是一个很长的文档,您可以跳过开始并阅读在表格视图中显示一个部分

如果需要,可以使用2D数组来保留节和行。并在 numberOfSections 方法中返回array.count,并在 numberOfRows:inSection 中,返回数组[section] .count

更多例子,

感谢, Ĵ