1

在测试时我发现了这种奇怪的行为:

var viewModel: ViewModel? {
    didSet {
        viewModel.delegate = self
    }
}

view.viewModel?.delegate = MockDelegate

此代码将始终导致viewModel.delegate成为视图。

有什么办法可以防止这种情况发生吗?

4

1 回答 1

0

首先检查是否设置了 viewModel。view.viewModel = model将委托设置为ViewModel model对象。然后view.viewModel!.delegate = MockDelegate将覆盖委托对象。

var viewModel: ViewModel? {
    didSet {
        viewModel.delegate = self // this is the issue.
    }
}

view.viewModel = model
// this line should override the delegate instance from self to `MockDelegate`
view.viewModel!.delegate = MockDelegate
于 2016-11-25T11:33:30.027 回答