带有 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];
例如,我希望我的视图显示祝酒词,我现在的做法是这样的:
可见:
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];