Objective c 我应该在ReactiveCocoa MVVM中重新绑定模型吗?

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

我已经开始设置视图模型,以便它们自动解除绑定/绑定到它们所表示的任何模型

我对ReactiveCocoa比较陌生,我想知道我所做的是好是坏,还是有更好的方法

例如,如果我有一个表示电影模型的视图模型,我会将其设置为:

-(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的内容,并在我的代码中进行了测试,这正是我所需要的!