带有 MVVM 的 ReactiveCocoa
ReactiveCocoa with MVVM
我对这种反应式编程还很陌生。我显然在这里遗漏了 link。
好的,现在在我的视图控制器中,我有
- (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 测试] 是...
-(void) test{
_string = @"Test";
}
我是不是处理错了?我认为这会起作用。
谢谢,本。
离得不远...
[RACObserve(viewModel, string) subscribeNext:^(NSString* string){
NSLog(@"%@", viewModel.string);
}];
只需要
[RACObserve(self, viewModel.string) subscribeNext:^(NSString* string){
NSLog(@"%@", string);
}];
和
[viewModel test];
变成
[self.viewModel test];
您的代码中存在一些您自己的答案已经涵盖的问题,但是您没有收到 next
信号的原因是您没有使用 [=11= 设置字符串],而是直接访问 class' 变量作为 _string
。
Properties are actually Objective-C methods 巧妙地对我们隐藏了,当您调用 self.string = @"Test";
时,实际发生的是正在调用 class 的自动创建的 setString:
方法,它的默认行为是将 _string
设置为新传递的值。
RAC之所以需要你这样做是因为_string
只是一个普通的变量,RAC无法知道这个变量发生了变化。当您使用 self.string
时,RAC 可以从运行时获取通知,通知您通过称为 Key-Value Observation.
的方式调用了 setString:
方法
我对这种反应式编程还很陌生。我显然在这里遗漏了 link。
好的,现在在我的视图控制器中,我有
- (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 测试] 是...
-(void) test{
_string = @"Test";
}
我是不是处理错了?我认为这会起作用。
谢谢,本。
离得不远...
[RACObserve(viewModel, string) subscribeNext:^(NSString* string){
NSLog(@"%@", viewModel.string);
}];
只需要
[RACObserve(self, viewModel.string) subscribeNext:^(NSString* string){
NSLog(@"%@", string);
}];
和
[viewModel test];
变成
[self.viewModel test];
您的代码中存在一些您自己的答案已经涵盖的问题,但是您没有收到 next
信号的原因是您没有使用 [=11= 设置字符串],而是直接访问 class' 变量作为 _string
。
Properties are actually Objective-C methods 巧妙地对我们隐藏了,当您调用 self.string = @"Test";
时,实际发生的是正在调用 class 的自动创建的 setString:
方法,它的默认行为是将 _string
设置为新传递的值。
RAC之所以需要你这样做是因为_string
只是一个普通的变量,RAC无法知道这个变量发生了变化。当您使用 self.string
时,RAC 可以从运行时获取通知,通知您通过称为 Key-Value Observation.
setString:
方法