正常情况下 RACObserve 键值监听为,参数一:监听属性的父节点、 参数二:准备监听的属性
RAC(self.titleLabel, text) = RACObserve(self.viewModel, name);
self.viewModel.name = @"super";
然而在嵌套式的结构中,可能父节点变化而引起当前属性变化,此时参数配置就需要注意了,比如当 viewModel 被赋值并且 viewModel 的属性 name 也发生变化, 需要对父节点和属性同时尽心监听。
- 错误写法
RAC(self.titleLabel, text) = RACObserve(self.viewModel, name);
SYViewModel *viewModel = [[SYViewModel alloc] init];
self.viewModel = viewModel;
viewModel.name = @"super super";
// self.titleLabel.text 不会发生变化
- 正确写法
RAC(self.titleLabel, text) = RACObserve(self, viewModel. name); // 需要对 name 父节点同时监听
SYViewModel *viewModel = [[SYViewModel alloc] init];
self.viewModel = viewModel;
viewModel.name = @"super super"; // 正常改变为 "super super"