標籤:
前言
前段時間在看Masonry這個全新的第三方的布局架構的時候,開始瞭解了鏈式編程.後來慢慢的又開始瞭解函數式編程和響應式編程.在這集中的編程思想下,開始接觸和研究了ReactiveCocoa這個架構.在很多大神的blog中,都對這個架構有著高度的評價,各種秀自己如何靈活的使用ReactiveCocoa.今天主要就是這個架構的一些自己的學習筆記.
1.ReactiveCocoa簡介
ReactiveCocoa(簡稱為RAC),是由Github開源的一個應用於iOS和OS開發的新架構.
ReactiveCocoa結合了幾種編程風格:
前言
前段時間在看Masonry這個全新的第三方的布局架構的時候,開始瞭解了鏈式編程.後來慢慢的又開始瞭解函數式編程和響應式編程.在這集中的編程思想下,開始接觸和研究了ReactiveCocoa這個架構.在很多大神的blog中,都對這個架構有著高度的評價,各種秀自己如何靈活的使用ReactiveCocoa.今天主要就是這個架構的一些自己的學習筆記.
1.ReactiveCocoa簡介
ReactiveCocoa就被開發人員們描述為響應式函數編程架構(FRP);使用RAC就不需要考慮調用的順序,直接考慮結果,使得代碼高彙總,方便管理.
2.ReactiveCocoa使用
2.1 RACSiganl(RAC的核心類):訊號類 用來資料傳遞
注意點:
該訊號預設是一個冷訊號,當值改變了,也並不會觸發改訊號,只有訂閱了該訊號,才會觸發改訊號.
訂閱訊號的方法: subscribeNext:
//建立一個訊號
RACSignal *singal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
//發送一個訊號.
[subscriber sendNext:@"Ricky"];
//如果不在發送資料,最好發送訊號完成,內部會自動調用[RACDisposable disposable]取消訂閱訊號。
[subscriber sendCompleted];
return [RACDisposable disposableWithBlock:^{
//訊號取消
}];
}];
//訂閱訊號 ,啟用訊號
[singal subscribeNext:^(id x) {
//x : 就是訊號發送到資料
NSLog(@"%@",x);
}];
2.2 替換Target和Action
UITextField *textField =[[UITextField alloc]initWithFrame:CGRectMake(100, 100, 100, 40)];
textField.backgroundColor =[UIColor redColor];
[self.view addSubview:textField];
//監聽UITextField的輸入變化
[[textField rac_textSignal] subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
//x就是textfield的text,所以就把id修改成NSString
// [[textField rac_textSignal] subscribeNext:^(NSString * text) {
//
// NSLog(@"%@",text);
// }];
UIButton *button =[UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(100, 100, 100, 100);
button.backgroundColor = [UIColor yellowColor];
[self.view addSubview:button];
[[button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
//這個x就是button,已經知道了類型就可以把id x 修改成UIButton *button
NSLog(@"%@",x);
}];
RAC的通知不需要移除,RAC會自己處理改通知的移除
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil] subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
//延遲一定時間做某事
[[RACScheduler mainThreadScheduler]afterDelay:2 schedule:^{
NSLog(@"Ricky");
}];
//每個多長時間調用一次事件
[[RACSignal interval:1 onScheduler:[RACScheduler mainThreadScheduler]] subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
UIScrollView *scroller =[[UIScrollView alloc]initWithFrame:CGRectMake(100, 100, 100, 200)];
[self.view addSubview:scroller];
[RACObserve(scroller, contentOffset) subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
iOS 開發之 ReactiveCocoa(基礎)