在项目开发中,数据之间常常存在着联动现象。一个数据的变化就会引发其余数据相应的变化。好比在以下的颜色选择器中,输入不一样的R、G、B值预览的颜色就会变化。实现起来一般会有几种方式:git
1 在改变R、G、B值的同时手动改变预览颜色值。一般在非事件驱动的UI系统中使用。github
2 注册R、G、B值对应控件的事件监听器,并在事件处理函数中进行预览颜色的更新。一般应用在事件驱动的UI系统中,好比MFC、WinForm等。ide
3 将R、G、B和预览颜色值进行绑定,一方的变化都会自动引起另外一方的变化。这种技术是事件驱动的一种延伸。目前不少主流的UI系统都可以支持,好比QT、WPF等。函数
对于事件驱动和数据绑定之间的不一样,能够参照以下的齿轮啮合图。事件驱动中每一个齿轮都是隔开的,一个齿轮转动会通知一个处理过程,并有处理过程触发相关齿轮的转动。而数据绑定则比如啮合齿轮,一个转动会自动带动其余齿轮,无需人工干预或者其余处理机制。iOS的UI开发中是遵循事件驱动的,但没有提供数据绑定。不过因为支持了KVO(键值观察机制),实现数据绑定就相对比较天然和容易。github上的Binding库就提供了这样一个解决方案。orm
基于Binding库的代码片断以下:blog
- (void)viewDidLoad;
{
[super viewDidLoad];
[ILBinding bindingWithKeyPath:@"red"
ofSourceObject:self
boundToKeyPath:@"value"
ofTargetUIControl:self.redSlider
options:[ILBindingOptions optionsWithDefaultValues]];
[ILBinding bindingWithKeyPath:@"green"
ofSourceObject:self
boundToKeyPath:@"value"
ofTargetUIControl:self.greenSlider
options:[ILBindingOptions optionsWithDefaultValues]];
[ILBinding bindingWithKeyPath:@"blue"
ofSourceObject:self
boundToKeyPath:@"value"
ofTargetUIControl:self.blueSlider
options:[ILBindingOptions optionsWithDefaultValues]];
];
[bindings addObject:
[ILBinding bindingWithKeyPath:@"selectedColor"
ofSourceObject:self
boundToKeyPath:@"backgroundColor"
ofTargetObject:self.colorDisplayView
options:[ILBindingOptions optionsWithDefaultValues]]
];
……
}事件
实现起来很像啮合齿轮吧?是否有些小当心动呢?赶快下载试试吧~开发