复杂列表变难维护,通常不是 UICollectionView 本身的问题,而是 cell 承担了太多业务。一个稳定的列表页应该把数据、布局、事件和副作用拆开。
Section Model 是页面协议
把页面拆成明确 section:header、banner、feed、empty、footer。每个 section 声明自己的 item、布局和展示规则,ViewController 只负责组合。
enum HomeSection: Hashable {
case profile
case shortcuts
case feed
}
enum HomeItem: Hashable {
case profile(ProfileViewData)
case shortcut(ShortcutViewData)
case article(ArticleViewData)
}
Cell 只接收 ViewData
cell 不应该知道接口模型、埋点规则或跳转逻辑。它接收已经整理好的 ViewData,暴露按钮点击闭包或 delegate 事件。
Diffable 不是万能解药
Diffable Data Source 可以减少 reload 错误,但 hash 稳定性要靠你保证。不要把会频繁变化的展示状态混进 identity,否则动画和复用会变得不可预测。