这里通过具体代码来实现双向绑定
自定义一个模型Person,有name、age、height三个属性
自定义一个视图,包含nameField、ageField、heightField三个输入框
需求:完成视图中三个输入框内部的内容显示为Person类对应属性的值,当Person类内容改变时,对应输入框的内部内容也改变;如果输入框的内部内容发生改变,Person实例的属性也改变。
// 字符串的绑定
RAC(_nameField,text) = RACObserve(p, name);
// 基本数据类型的绑定
RAC(_ageField,text) = [RACObserve(p, age) map:^id _Nullable(id _Nullable value) {
return [value description];
}];
RAC(_heightField,text) = [RACObserve(p, height) map:^id _Nullable(id _Nullable value) {
return [value description];
}];
[[RACSignal combineLatest:@[_nameField.rac_textSignal,_ageField.rac_textSignal,_heightField.rac_textSignal]] subscribeNext:^(RACTuple *x) {
p.name = x.first;
p.age = [x.second integerValue];
p.height = [x.third doubleValue];
}];
最后:当修改模型数据后,不需要赋值,UI即可显示模型对应的数据
当修改UI界面中输入框内部的内容时,模型的数据也跟着改变了,可以通过打印看出结果。