日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ReactiveCocoa个人记录

發布時間:2025/3/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ReactiveCocoa个人记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考資料:

  • ReactiveCocoa源碼(OC版)

  • Swift 版?or?ReactiveSwift

  • MVVMReactiveCocoaDemo介紹

常見用法

1. rac_signalForControlEvents監聽事件,替換addTarget監聽

[[self.myButton rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {@strongify(self);//改變屬性 觸發KVOself.userModel.userName=@"cnblogs";//發送通知 觸發通知監聽[[NSNotificationCenter defaultCenter] postNotificationName:MPTNotificationName object:nil];NSLog(@"rac_signalForControlEvents監聽事件 - ");}]; 復制代碼

2. rac_textSignal 監聽文本框的文字改變

[[self.myTextField rac_textSignal] subscribeNext:^(id x) {NSLog(@"rac_textSignal當前輸入:%@",x);}];//distinctUntilChanged 相同就不會再響應 takeUntil:(RACSignal *):獲取信號直到某個信號執行完成[[[[self.myTextField rac_textSignal] distinctUntilChanged] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {NSLog(@"rac_textSignal-distinctUntilChanged當前輸入:%@",x);}]; 復制代碼

3. rac_valuesAndChangesForKeyPath KVO監聽

[[self.userModel rac_valuesAndChangesForKeyPath:@"userName" options:NSKeyValueObservingOptionNew observer:nil] subscribeNext:^(id x) {NSLog(@"userName now value:%@",x[0]);}]; 復制代碼

4. 監聽通知

[[[[NSNotificationCenter defaultCenter] rac_addObserverForName:MPTNotificationName object:nil] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {NSLog(@"收到通知了");}]; 復制代碼

5. 替換代理方法的實現 rac_signalForSelector

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"RAC" message:@"RAC TEST" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"other", nil];[[self rac_signalForSelector:@selector(alertView:clickedButtonAtIndex:) fromProtocol:@protocol(UIAlertViewDelegate)] subscribeNext:^(RACTuple *tuple) {NSLog(@"tuple.first:%@",tuple.first);NSLog(@"tuple.second:%@",tuple.second);NSLog(@"tuple.third:%@",tuple.third);//tuple.first UIAlertView當前對象//tuple.second索引值}];[alertView show];// [[self rac_signalForSelector:@selector(alertView:clickedButtonAtIndex:)] subscribeNext:^(id x) { // // }];//UIAlertView 還有更簡便的 上面只是為了演示rac_signalForSelector 下面的X就是索引值//如果使用此方法rac_signalForSelector 不會再執行了。因為rac_buttonClickedSignal內部已經訂閱了rac_signalForSelector方法[[alertView rac_buttonClickedSignal] subscribeNext:^(id x) {NSLog(@"index %@",x);}]; 復制代碼

6. 處理多個請求,都返回結果的時候,統一做處理.

rac_liftSelectorRACSignal *request1 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {// 發送請求1[subscriber sendNext:@"發送請求1"];return nil;}];RACSignal *request2 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {// 發送請求2[subscriber sendNext:@"發送請求2"];return nil;}];// 使用注意:幾個信號,參數一的方法就幾個參數,每個參數對應信號發出的數據。[self rac_liftSelector:@selector(updateUIWithR1:r2:) withSignalsFromArray:@[request1,request2]];復制代碼

更新UI

- (void)updateUIWithR1:(id)data r2:(id)data1 {NSLog(@"更新UI%@ %@",data,data1); } 復制代碼

隊列

//then用法//用于連接兩個信號,當第一個信號完成,才會連接then返回的信號RACSignal *thenSignal=[aSignal then:^RACSignal *{return bSignal;}];[thenSignal subscribeNext:^(id x) {NSLog(@"thenSignal的值:%@",x);}];//輸出 thenSignal的值:7 thenSignal的值:9 bSignal清理了 aSignal清理了//then實例[[[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {NSLog(@"第一步");[subscriber sendCompleted];//向訂閱者發送完成信號,否者一直處于執行中return nil;}] then:^RACSignal *{return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {NSLog(@"第二步");[subscriber sendCompleted];return nil;}];}] then:^RACSignal *{return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {NSLog(@"第三步");[subscriber sendCompleted];return nil;}];}] subscribeCompleted:^{NSLog(@"完成");}];//輸出:第一步 第二步 第三步//說明:then的用法要跟上面這樣使用,它會在RACSignal里面就執行 復制代碼
  • doNext doCompleted執行時間 doNext: 執行Next之前,會先執行這個Block doCompleted: 執行sendCompleted之前,會先執行這個Block
[[[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {[subscriber sendNext:@"執行sendNext"];NSLog(@"執行sendNext");[subscriber sendCompleted];return nil;}] doNext:^(id x) {NSLog(@"執行doNext");}] doCompleted:^{NSLog(@"執行doCompleted");}] subscribeNext:^(id x) {NSLog(@"執行subscribeNext"); }];// 輸出 // 執行doNext // 執行subscribeNext // 執行sendNext // 執行doCompleted復制代碼

總結

以上是生活随笔為你收集整理的ReactiveCocoa个人记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。