如何在 UITableView 中实现 dequeueReusableCell(withIdentifier:) 的代码?
Posted
技术标签:
【中文标题】如何在 UITableView 中实现 dequeueReusableCell(withIdentifier:) 的代码?【英文标题】:how to Implement the code for dequeueReusableCell(withIdentifier:) in UITableView? 【发布时间】:2021-06-06 11:04:59 【问题描述】:我的朋友被要求为 Facebook 的 ios 工程师角色快速实现 dequeueReusableCell(withIdentifier:)。
问题
假设您在 Apple 工作,但实现代码突然丢失。你要做的是实现 dequeueReusableCell(withIdentifier:) 的代码。 您将如何实现该功能?
class UItableView: UIScrollView
func dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell?
我的实现:
class UItableView: UIScrollView
let cells = [UITableViewCell]()
func dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell?
return cells.filter $0.identifier == identifier .first
我不确定它有多正确。
我认为存储带有索引的单元格的字典会是更好的方法。
谁能评论一下这个函数怎么写?
【问题讨论】:
【参考方案1】:我将创建一个字典,将identifier
与一组可用单元格相关联。当您需要一个单元格时,您可以删除并尽可能返回最后一个元素。
如果没有可用的单元格,则返回nil
popLast()
函数提供了我们需要的功能,并且复杂度为 O(1)。
一旦单元格不再可见,表格视图需要将单元格重新添加到重用数组中。
class UItableView: UIScrollView
let cellReusePools: [String:[UITableviewCell]] = [:]
func dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell?
return cellReusePools[identifier]?.popLast()
【讨论】:
不,这个表单返回一个可选的。它是原始数据源方法,如果需要,更新、更常用的方法会创建单元格,但该表单接受索引路径并且不返回可选值。在问题中,他们使用较旧的表单使其变得更容易,因此您无需担心单元格的创建。 如果我们必须考虑 IndexPath 怎么办?字典的值会是另一个以行/节为键的嵌套字典吗? 你会如何使用 indexPath?以上是关于如何在 UITableView 中实现 dequeueReusableCell(withIdentifier:) 的代码?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UITableView 的索引列表中实现放大镜? [关闭]
如何在 UITableView 中实现 dequeueReusableCell(withIdentifier:) 的代码?
如何在 UITableView 中实现类似 UIImageView 的延迟加载
如何在 UITableView 的 RXswift 和 RXCocoa 中实现 tableview 单元格的内部?