国产探花免费观看_亚洲丰满少妇自慰呻吟_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秒執行一次");}];
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 建昌县| 马鞍山市| 邻水| 慈溪市| 白沙| 二连浩特市| 五台县| 怀来县| 工布江达县| 新宁县| 盐源县| 商洛市| 交城县| 朝阳市| 扎兰屯市| 永康市| 中牟县| 安徽省| 海城市| 大兴区| 华容县| 巩留县| 聂拉木县| 莱阳市| 长顺县| 上虞市| 宣威市| 乌审旗| 黄龙县| 巨鹿县| 乐亭县| 玛纳斯县| 贞丰县| 宜城市| 海盐县| 甘肃省| 松桃| 安福县| 郧西县| 德昌县| 那曲县|