带有 ReactiveCocoa 的 MVVM,ViewModel 如何告诉 View 做一些一次性操作?

MVVM with ReactiveCocoa, how does ViewModel tell View to do some one time operation?

例如,我希望我的视图显示祝酒词,我现在的做法是这样的:

可见:

RACObserve(self.viewModel, showToast) subscribeNext:^(NSNumber *isShow) {
    if (isShow.boolValue) {
        self showToast];
    }
}

showToast 是我的 ViewModel 的一个 属性,我不认为这种方式具有很强的描述性,是否有更标准、更优雅的方式来实现这一点?

为了提供更具描述性的内容,您可以创建一个 RACSubject 以使用 [self.toastsSubject sendNext:@"Toast info string of some kind"] 手动发送通知。

@weakify(self)
[self.viewModel.toastsSubject subscribeNext:^(id _) {
    @strongify(self)
    [self showToast];
}

更好的是,你可以让 showToast 接受一个参数(比如 toast 的内容),那么你就不需要使用 @weakify@strongify,而是可以提升信号直接使用 rac_liftSelector.

[self rac_liftSelector:@selector(showToast:)
      withSignals:self.viewModel.toastsSubject, nil];