You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVVM模式下TableView单元格点击的数据传递问题咨询

针对TableView选中单元格MVVM实现的优化与问题排查建议

先看你当前实现的didSelectRowAt方法,这里有几个可以优化的点,同时我也会梳理MVVM模式下的最佳实践,帮你更好地排查后续问题:

现有代码的潜在问题

  • 方法参数已经提供了indexPath,但你又重新调用self.tableView.indexPathForSelectedRow!获取,这不仅冗余,而且强制解包!存在崩溃风险(比如用户快速连续点击时,选中状态可能发生变化)
  • 直接在ViewController中初始化详情页VC并传递ViewModel,虽然能实现功能,但可以进一步解耦,让ViewController更专注于视图层逻辑

优化后的代码示例

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
    // 直接使用方法参数的indexPath,避免冗余操作与强制解包风险
    let selectedOfferVM = offerViewModel.sourceAt(index: indexPath.row)
    let detailVC = OfferDetailViewController(nibName: "OfferDetailViewController", bundle: nil)
    detailVC.offerViewModel2 = selectedOfferVM
    
    // 添加上取消选中的逻辑,提升用户交互体验
    tableView.deselectRow(at: indexPath, animated: true)
    
    navigationController?.pushViewController(detailVC, animated: true)
}

MVVM模式下的进阶解耦思路

如果想更贴合MVVM的设计思想,可以进一步优化页面跳转逻辑:

  • 给OfferViewModel添加回调闭包,当用户选中某个条目时,由ViewModel触发回调,ViewController只负责响应回调完成页面跳转,让ViewModel专注于业务逻辑,ViewController专注于视图交互
  • 也可以引入路由模式,统一管理页面跳转逻辑,让ViewController和ViewModel都不直接依赖具体的视图控制器类型,进一步降低耦合度

你提到目前有两个相关问题待解决,欢迎补充具体的问题描述(比如是数据传递异常?页面无响应跳转?还是ViewModel的状态管理问题?),我可以帮你针对性分析解决。

内容的提问来源于stack exchange,提问作者avaharper222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:40:16