我对这种反应式编程非常陌生。我在这里显然错过了一个链接。
好的,所以在我的视图控制器中,我有
- (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。
答案 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];