ReactiveCocoa与MVVM

时间:2015-04-24 09:13:50

标签: ios mvvm reactive-cocoa

我对这种反应式编程非常陌生。我在这里显然错过了一个链接。

好的,所以在我的视图控制器中,我有

- (void)viewDidLoad {
    [super viewDidLoad];

    viewModel = [[ViewModel alloc]init];

    [RACObserve(viewModel, string) subscribeNext:^(NSString* string){
         NSLog(@"%@", viewModel.string);
    }];

    // This fires the NSLog
    viewModel.string = @"Test12345";

    // This doesn't
    [viewModel test];
}

[viewModel test]是......

-(void) test{
    _string = @"Test";
 }

我接近这个错误吗?我认为这会奏效。

谢谢,Ben。

2 个答案:

答案 0 :(得分:3)

您的代码中存在一些您自己的答案已经涵盖的问题,但是您没有收到<<<<<< HEAD your changes ======= remote changes >>>> 信号的原因是您没有使用next设置字符串,相反,你直接访问类'变量self.string

Properties are actually Objective-C methods我们巧妙地隐藏了这些内容,当您调用_string时,实际发生的是您正在调用类的自动创建的self.string = @"Test";方法,其默认行为是将setString:设置为新传递的值。

RAC要求您这样做的原因是_string只是一个普通变量而RAC无法知道此变量已经发生变化。当您使用_string时,RAC可以通过称为Key-Value Observation.

的内容从运行时获取self.string方法调用的通知

答案 1 :(得分:2)

离那么远......

[RACObserve(viewModel, string) subscribeNext:^(NSString* string){
     NSLog(@"%@", viewModel.string);
 }];

只需要

[RACObserve(self, viewModel.string) subscribeNext:^(NSString* string){
     NSLog(@"%@", string);
}];

[viewModel test];

变为

[self.viewModel test];