使用ReactiveCocoa的MVVM, ViewModel如何告诉View做一些一次性操作



例如,我想让我的视图显示toast,我现在的做法是:

在视图:

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];

最新更新