国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ReactiveCocoa入門

2019-11-09 18:52:27
字體:
來源:轉載
供稿:網友

什么是ReactiveCocoa?

ReactiveCocoa(簡稱RAC),是由Github開源的一個應用于iOS和OS X開發的新框架。RAC具有函數式編程(FP)和響應式編程(RP)的特性。

ReactiveCocoa的宗旨是Stream of values over time,隨著時間而不斷流動的數據流。

ReactiveCocoa主要解決了以下這些問題 - UI數據綁定

UI控件通常需要綁定一個事件,RAC可以很方便的綁定任何數據流到控件上。

用戶交互事件綁定

RAC為可綁定的UI控件提供了一些列能發送Signal信號的方法。這些數據流會在用戶交互中互相傳遞

解決狀態以及狀態之間依賴過多的問題

有了RAC的綁定之后,可以不用再關心各種復雜的狀態,isSelect,isFinish……也解決了這些狀態在后期很難維護的問題

消息傳遞機制的大統一

OC中編程原來消息傳遞機制有以下幾種:delegate,block callback,target-action,timers,KVO。現在這些方式都統一用RAC來處理,下面我會用RAC簡單實現這些方式。

RAC的基本使用

1. target-action

RAC最基本的入門使用就是對事件的監聽``` [[self.textField rac_signalForControlEvents:UIControlEventEditingDidEndOnExit] subscribeNext:^(__kindof UIControl * _Nullable x) { NSLog(@"change");}];```上面就實現了監聽textField的UIControlEventEditingDidEndOnExit事件,再也不用add target了,其他UIbutton的可以類比還有手勢也類似```UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];[[tap rac_gestureSignal] subscribeNext:^(__kindof UIGestureRecognizer * _Nullable x) { NSLog(@"tap");}];[self.view addGestureRecognizer:tap];```

2.代理

用RAC寫代理是有局限的,它只能實現返回值為void的代理方法,但是代理可以簡化代碼,實現形式是rac_signalForSelector: fromPRotocol:

UIScrollView *scrolView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 200, 400)]; scrolView.contentSize = CGSizeMake(200, 800); scrolView.backgroundColor = [UIColor greenColor]; scrolView.delegate = self; [self.view addSubview:scrolView]; //這里訂閱收到的是一個x,當一個頁面存在多個tableview時,我們可以對x進行判斷看是哪個tableview [[self rac_signalForSelector:@selector(scrollViewWillBeginDragging:) fromProtocol:@protocol(UIScrollViewDelegate)] subscribeNext:^(RACTuple * x) { NSLog(@"點擊了"); NSLog(@"%@---%@",x.first,x.second); }];

@selector是指這次監聽的方法,fromProtocol指依賴的代理,block中有個RACTuple,相當于集合類,下面的first,second等就是類的各個參數

3.通知

讓textField成為第一響應者,接收鍵盤彈出的通知,可以這么寫[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillShowNotification object:nil] subscribeNext:^(id x) { NSLog(@"鍵盤彈出"); }];

4.KVO

RAC中的KVO大部分都是宏定義,代碼非常簡潔,實現形式是RACObserve(TARGET,KEYPATH)TARGET是監聽目標,KEYPATH是要觀察的屬性值,下面以UIScrollView滾動為例

```UIScrollView *scrolView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 200, 400)];scrolView.contentSize = CGSizeMake(200, 800);scrolView.backgroundColor = [UIColor greenColor];[self.view addSubview:scrolView];[RACObserve(scrolView, contentOffset) subscribeNext:^(id x) { NSLog(@"contentOffset---%@",x);}];```

5.timers

延時執行

//3秒后執行一次[[RACScheduler mainThreadScheduler] afterDelay:3 schedule:^{ NSLog(@"3秒后執行一次");}];

延時執行

//每隔2秒執行一次[[RACSignal interval:2 onScheduler:[RACScheduler mainThreadScheduler]] subscribeNext:^(id x) { NSLog(@"每隔2秒執行一次");}];
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 芮城县| 宣武区| 商城县| 富源县| 门头沟区| 亚东县| 栾城县| 广昌县| 新河县| 聂拉木县| 龙游县| 白银市| 仙游县| 怀柔区| 淳化县| 武穴市| 剑川县| 娄底市| 兰考县| 通化县| 库车县| 苍梧县| 龙游县| 名山县| 斗六市| 增城市| 永年县| 拜泉县| 资阳市| 甘谷县| 屏东市| 阿拉善左旗| 常宁市| 永德县| 江口县| 宾阳县| 资溪县| 铁岭市| 镇巴县| 柳河县| 资中县|