在項目開發中,數據之間常常存在着聯動現象。一個數據的變化就會引發其餘數據相應的變化。好比在以下的顏色選擇器中,輸入不一樣的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]]
];
……
}事件
實現起來很像齧合齒輪吧?是否有些小當心動呢?趕快下載試試吧~開發