【发布时间】:2018-10-30 03:57:26
【问题描述】:
我正在实现一个简单的 Master-Detail 应用程序,其中 Master viewController 管理一个表视图,该视图显示调用 REST 服务的结果。 Detail viewController 管理一个视图,我在其中显示有关 Master 中所选项目的更多信息。常见场景。
我正在尝试应用MVVM 模式。在 Master viewController 中,我以这种方式创建并初始化它的 viewModel:
lazy private var viewModel: ListViewModel = {
return ListViewModel()
}()
override func viewDidLoad() {
super.viewDidLoad()
initViewModel()
}
private func initViewModel() {
viewModel.onModelChange = { [weak self] () in
DispatchQueue.main.async {
self?.tableView.reloadData()
}
}
viewModel.fetchData()
}
我的问题是:在提供给viewModel 的闭包中,self 应该是weak 还是unowned?我找到了一个实现类似于我的场景的示例,将其设置为weak,另一个将其设置为unowned,所以我并不完全清楚。
【问题讨论】:
-
如果没有
self(视图控制器),您的viewModel将永远存在。因此,self 永远不会为零,您可以放心地使用unowned。
标签: ios swift mvvm closures weak-references