Objective c 我应该在ReactiveCocoa MVVM中重新绑定模型吗?
我已经开始设置视图模型,以便它们自动解除绑定/绑定到它们所表示的任何模型 我对ReactiveCocoa比较陌生,我想知道我所做的是好是坏,还是有更好的方法 例如,如果我有一个表示电影模型的视图模型,我会将其设置为:Objective c 我应该在ReactiveCocoa MVVM中重新绑定模型吗?,objective-c,reactive-cocoa,Objective C,Reactive Cocoa,我已经开始设置视图模型,以便它们自动解除绑定/绑定到它们所表示的任何模型 我对ReactiveCocoa比较陌生,我想知道我所做的是好是坏,还是有更好的方法 例如,如果我有一个表示电影模型的视图模型,我会将其设置为: -(void)bind{ [RACObserve(self, movieModel) subscribeNext:^(id x) { [self unbindMovieModel]; [self bindMovieModel]; }]
-(void)bind{
[RACObserve(self, movieModel) subscribeNext:^(id x) {
[self unbindMovieModel];
[self bindMovieModel];
}];
}
-(void)unbindMovieModel{}
-(void)bindMovieModel{
self.titleSignal = [RACObserve(self.movieModel, title)
takeUntil:[self rac_signalForSelector:@selector(unbindMovieModel)];
self.averageRatingSignal = [[self.movieModel currAverageRating]
takeUntil:[self rac_signalForSelector:@selector(unbindMovieModel)];
//Setup some more complex signals, etc...
}
现在,如果我在任何时候这样做:
self.movieModel = newModel;
视图模型将解除与旧电影模型的绑定,并将自身绑定到新模型
有更好的办法吗?这不是“反应性”吗?非常感谢您的反馈。您可以通过将
movieModel
从RACObserve
宏的静态部分移动到动态部分,大大简化此案例:
RAC(self.titleLabel, text) = RACObserve(self, movieModel.title);
然后,在交换模型实例和模型实例本身更改时,视图都将更新
如果视图模型本身包含信号,则可以执行以下操作:
RAC(self.ratingLabel, text) = [[RACObserve(self, movieModel) map:^(id viewModel) {
return viewModel.currAverageRating;
}] switchToLatest];
谢谢,我觉得我错过了一些非常基本的东西。如果我不使用RACObserve,有没有办法做到这一点?对于第二个我得到平均评分的例子,你会怎么做?@AkiraSpeirs我已经更新了我的答案以涵盖这个案例。非常感谢,我刚刚阅读了关于switchToLatest的内容,并在我的代码中进行了测试,这正是我所需要的!