ReactiveCocoa筆記2

  1. then:等待當(dāng)前信號complete之后再連接下一個信號,并且會把error也傳出來,這樣在后面subscribeNext:error:的時候也能接收到當(dāng)前信號發(fā)出的error
[[[self requestAccessToTwitterSignal]
  then:^RACSignal *{
    @strongify(self)
    return self.searchText.rac_textSignal;
  }]
  subscribeNext:^(id x) {
    NSLog(@"%@", x);
  } error:^(NSError *error) {
    NSLog(@"An error occurred: %@", error);
  }];
  1. filter:可以過濾信號,當(dāng)不滿足條件的時候不需要觸發(fā)接收者,可以用filter:過濾,返回YES則繼續(xù)傳遞,返回NO則終止傳遞:
[[[[self requestAccessToTwitterSignal]
  then:^RACSignal *{
    @strongify(self)
    return self.searchText.rac_textSignal;
  }]
  filter:^BOOL(NSString *text) {
    @strongify(self)
    return [self isValidSearchText:text];
  }]
  subscribeNext:^(id x) {
    NSLog(@"%@", x);
  } error:^(NSError *error) {
    NSLog(@"An error occurred: %@", error);
  }];
  1. 用deliverOn:來切換當(dāng)前流所在的線程,例如http請求完處理理數(shù)據(jù)更新UI的時候,需要切換到主線程中執(zhí)行
[[[[[[self requestAccessToTwitterSignal]
 then:^RACSignal *{
   @strongify(self)
   return self.searchText.rac_textSignal;
 }]
 filter:^BOOL(NSString *text) {
   @strongify(self)
   return [self isValidSearchText:text];
 }]
 flattenMap:^RACStream *(NSString *text) {
   @strongify(self)
   return [self signalForSearchWithText:text];
 }]
 deliverOn:[RACScheduler mainThreadScheduler]]
 subscribeNext:^(id x) {
   NSLog(@"%@", x);
 } error:^(NSError *error) {
   NSLog(@"An error occurred: %@", error);
 }];
  1. subscribeOn:可以保證信號在指定的線程執(zhí)行,比如下載圖片時需要在后臺線程(下載完展示的時候需要在主線程執(zhí)行)
-(RACSignal *)signalForLoadingImage:(NSString *)imageUrl {
  
  RACScheduler *scheduler = [RACScheduler
                         schedulerWithPriority:RACSchedulerPriorityBackground];
  
  return [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]];
    UIImage *image = [UIImage imageWithData:data];
    [subscriber sendNext:image];
    [subscriber sendCompleted];
    return nil;
  }] subscribeOn:scheduler];
}

//----------------------
cell.twitterAvatarView.image = nil;
[[[self signalForLoadingImage:tweet.profileImageUrl]
  deliverOn:[RACScheduler mainThreadScheduler]]
  subscribeNext:^(UIImage *image) {
   cell.twitterAvatarView.image = image;
  }];
  1. throttle:方法可以丟棄掉指定時間內(nèi)兩個next事件中的前一個next事件.好像我們使用自動搜索功能的時候,如果一直在輸入新的字符串,搜索結(jié)果是不會改變的,只有我們比較長時間沒有輸入的時候,搜索請求才會觸發(fā), 搜索數(shù)據(jù)才會更新,如下:
[[[[[[[self requestAccessToTwitterSignal]
  then:^RACSignal *{
    @strongify(self)
    return self.searchText.rac_textSignal;
  }]
  filter:^BOOL(NSString *text) {
    @strongify(self)
    return [self isValidSearchText:text];
  }]
  throttle:0.5]
  flattenMap:^RACStream *(NSString *text) {
    @strongify(self)
    return [self signalForSearchWithText:text];
  }]
  deliverOn:[RACScheduler mainThreadScheduler]]
  subscribeNext:^(NSDictionary *jsonSearchResult) {
    NSArray *statuses = jsonSearchResult[@"statuses"];
    NSArray *tweets = [statuses linq_select:^id(id tweet) {
      return [RWTweet tweetWithStatus:tweet];
    }];
    [self.resultsViewController displayTweets:tweets];
  } error:^(NSError *error) {
    NSLog(@"An error occurred: %@", error);
  }]; 

  1. distinctUntilChanged方法,會過濾掉跟上次snedNext:值一樣的信號.如果一次sendNext是0,下一次還是sendNext:0就會過濾掉.只有sendNext:的值跟上次不一樣的時候才會通過.例如
RACSignal *validSearchSignal =
    [[RACObserve(self, searchText)
      map:^id(NSString *text) {
         return @(text.length > 3);
      }]
      distinctUntilChanged];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌羡玛,老刑警劉巖魄眉,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件票彪,死亡現(xiàn)場離奇詭異扫步,居然都是意外死亡蝙云,警方通過查閱死者的電腦和手機(jī)捆等,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門滞造,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人栋烤,你說我怎么就攤上這事断部。” “怎么了班缎?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵蝴光,是天一觀的道長。 經(jīng)常有香客問我达址,道長蔑祟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任沉唠,我火速辦了婚禮疆虚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己径簿,他們只是感情好罢屈,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著篇亭,像睡著了一般缠捌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上译蒂,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天曼月,我揣著相機(jī)與錄音,去河邊找鬼柔昼。 笑死哑芹,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捕透。 我是一名探鬼主播聪姿,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼乙嘀!你這毒婦竟也來了末购?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤乒躺,失蹤者是張志新(化名)和其女友劉穎招盲,沒想到半個月后低缩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嘉冒,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年咆繁,在試婚紗的時候發(fā)現(xiàn)自己被綠了讳推。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡玩般,死狀恐怖银觅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坏为,我是刑警寧澤究驴,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站匀伏,受9級特大地震影響洒忧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜够颠,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一熙侍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦蛉抓、人聲如沸庆尘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驶忌。三九已至,卻和暖如春惩系,著一層夾襖步出監(jiān)牢的瞬間位岔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工堡牡, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留抒抬,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓晤柄,卻偏偏與公主長得像擦剑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芥颈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理惠勒,服務(wù)發(fā)現(xiàn),斷路器爬坑,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 從三月份找實習(xí)到現(xiàn)在纠屋,面了一些公司,掛了不少盾计,但最終還是拿到小米售担、百度、阿里署辉、京東族铆、新浪、CVTE哭尝、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,209評論 11 349
  • RAC使用測試Demo下載:github.com/FuWees/WPRACTestDemo 1.ReactiveC...
    FuWees閱讀 6,359評論 3 10
  • 來自第三宮哥攘,游戲人間,天使和魔鬼同住一體材鹦。 如風(fēng)一般善變靈通逝淹,巧言善語,行文妙筆桶唐,掠千萬樹上葉栅葡,傾萬千叢中...
    文沭閱讀 211評論 0 0
  • 最近都累的跟狗似的。 這幾天都是上A班莽红,人很少妥畏,很忙邦邦,我從早上七點起床,七點半去吃早餐醉蚁,八點上班直...
    X靜馨閱讀 139評論 2 1