我正在实现一个简单的主从应用程序,其中 Master viewController
管理一个 TableView ,该 TableView 显示调用 REST 服务的结果。 Detail viewController
管理一个 View ,我在其中显示有关在 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 ]。这告诉您的模型不要持有对 ViewController
Apple 文档明确指出:
“Like weak references, an unowned reference does not keep a strong hold on the instance it refers to. Unlike a weak reference, however, an unowned reference is assumed to always have a value”.
在您的情况下,总是有ViewController
。所以无主引用的好处是它是nonoptional
。每次使用无需解包
关于ios - MVVM:使用闭包、无主或弱 self 将 View 与 ViewModel 绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50432831/