【发布时间】:2023-04-06 00:38:01
【问题描述】:
我正在实现一个简单的 ItemListing 应用程序,其中 ProductList 视图控制器管理一个表视图,该视图显示调用 REST 服务的结果。 Detail viewController 管理一个视图,我在其中显示有关 ProductListVC 中所选项目的更多信息。我正在尝试应用 MVVM 模式。我正在使用闭包来绑定视图模型和视图控制器。在 ProductList viewController 中,我以这种方式创建和初始化它的 viewModel:
class ProductListVC: UIViewController {
var viewModel: ProductViewModel = ProductViewModel()
var productTblView = UITableView()
override func viewDidLoad() {
super.viewDidLoad()
initViewModel()
}
func initViewModel() {
viewModel.reloadTableViewClosure = { [weak self] () in
DispatchQueue.main.async {
self?.productTblView.reloadData()
}
}
viewModel.fetchData()
}
}
我的问题是在reloadTableViewClosure 中使用[weak self] 有什么需要?在这种情况下,强引用是如何发生的?如果有人能解释[weak self] 或[unowned self] 在这种情况下的用法,那就太好了。我的困惑是,由于 reloadTableViewClosure 归 viewmodel 所有,self 如何保持对闭包的强引用?
【问题讨论】:
标签: swift mvvm closures weak-references