5分鐘學(xué)會RxSwift里面80%的常見用法(3.2.0版)

之前項(xiàng)目一直用的是RAC2.5版,目前是和Swift混編阿逃,準(zhǔn)備升級到RAC5.0版逸绎,發(fā)現(xiàn)RAC5.0的文檔有點(diǎn)變態(tài),網(wǎng)上看了很多關(guān)于RAC5.0的博文淆游,給我的感覺是:“你們是在炫耀自己掌握了多么高深的編程技術(shù)了嗎傍睹?專業(yè)術(shù)語一大堆、理論好幾頁犹菱、就是不舉幾個(gè)常用的例子”拾稳,所以我寫了一篇更通俗易懂,5分鐘就能學(xué)會的博文腊脱,希望能幫到大家访得。(RxSwift 完全可以取代RAC5.0)

RxSwift常用的方法大概也就這么多了,以后再有常用的方法會即時(shí)更新

個(gè)人覺得針對Swift項(xiàng)目來說RxSwift要比RAC5.0版本更好理解陕凹、更方便應(yīng)用悍抑。RAC2.5版本更適合OC開發(fā)《虐遥混編的話建議用:RAC2.5和RxSwift3.2結(jié)合搜骡。

pod添加方式:

pod 'RxSwift', '~> 3.2.0'
pod 'RxCocoa', '~> 3.2.0'
用的時(shí)候需要導(dǎo)入頭文件:import RxCocoa

RxSwift里面的好多方法不能自動提示的解決方案:

當(dāng)敲類似textF.rx.text.s 的語法沒有提示的情況下,可以敲 textF.rx.text s 就有提示了佑女,有時(shí)候點(diǎn)語法不提示记靡,應(yīng)該是xcode的bug

備注:

下面的所有方法都是返回:Disposable 類型,這個(gè)類型就一個(gè)方法dispose()就是手動關(guān)閉監(jiān)聽团驱,一般用不到這個(gè)返回值摸吠。但是這個(gè)庫的很多方法沒有添加關(guān)鍵字:@discardableResult ,導(dǎo)致調(diào)用方法的時(shí)候必須用 _ = 來接收返回值嚎花,否則有警告寸痢。

1、RxSwift - 通知的用法

.takeUntil(self.rx.deallocated).作用是:保證頁面銷毀的時(shí)候移除通知

// 接收通知:
 _ = NotificationCenter.default.rx.notification(Notification.Name("kNotificationTestName")).takeUntil(self.rx.deallocated).subscribe(onNext: { (value) in
            print(value)
        })
// 發(fā)送通知:
NotificationCenter.default.post(name: Notification.Name(rawValue: "kNotificationTestName"), object: "testContent")

// 監(jiān)聽鍵盤的通知
_ = NotificationCenter.default.rx.notification(Notification.Name.UIKeyboardWillHide).takeUntil(self.rx.deallocated).subscribe(onNext: { [unowned self] (value) in
            self.tableView.reloadData()
            print("鍵盤隱藏了")
        })

2贩幻、RxSwift - UITextField輸入限制

// 監(jiān)聽UITextField的內(nèi)容變化(剪切轿腺、粘貼、刪除所有的內(nèi)容都會觸發(fā)改方法)
//  subscribe方法只需要一個(gè)onNext 參數(shù)丛楚,其他的參數(shù)可以不理會(手動刪除其他參數(shù)就是下面的代碼的樣子了)
 _ = textF.rx.text.subscribe(onNext: { (text) in
        print(text ?? "")
  })

3族壳、RxSwift - UIButton、SegmentedControl等點(diǎn)擊事件

_ = btn.rx.controlEvent(UIControlEvents.touchUpInside).subscribe(onNext: { [unowned self] in
    print(self.btn)            
  })

4趣些、RxSwift - KVO

// 監(jiān)聽屬性的時(shí)候(不能監(jiān)聽基本類型仿荆,必須轉(zhuǎn)成NSNumber,并且有dynamic修飾符)
    dynamic var nameStr: String = "test" // 初始化屬性
//  不能用observe 否則會引起循環(huán)引用
_ = self.rx.observeWeakly(String.self, "nameStr").subscribe(onNext: { (value) in
           print(value ?? "")
    })
// CGRect等類型不能用observeWeakly,否則監(jiān)聽不到
_ = self.textF.rx.observe(CGRect.self, "frame").subscribe(onNext: { (value) in
            print("frame====\(String(describing: value))")
        })
// ???  CGPoint 必須用observeWeakly拢操,否則釋放不掉
        _ = self.tableView?.rx.observeWeakly(CGPoint.self, "contentOffset").subscribe(onNext: { [weak self] (value) in
        print("value====\(String(describing: value))")
        if let value = value {
            self?.myObserverAction(newValue: value)
        }
        })

5锦亦、RxSwift - map的用法

// 把返回的String類型map成UIColor類型
  _ = textF.rx.text.map({ (value) -> UIColor in
            if let value = value , value.characters.count > 5 {
                return UIColor.red
            } else {
                return UIColor.green
            }
     }).subscribe(onNext: { [unowned self] (color) in
            self.textF.textColor = color
        })

6、RxSwift - filter的用法

// 篩選符合一點(diǎn)條件的情況下才執(zhí)行下面的subscribe方法
_ = textF.rx.text .filter({ (value) -> Bool in
            if let value = value , value.characters.count > 3 {
                return true
            }
            return false
        }).subscribe(onNext: { (text) in
            print("==========\(text!)")
        })

7令境、RxSwift - 綁定

//Rx的重要角色為Observable(被觀察者)和Observer(觀察者)
// 把UITextField里的文字賦值給UIButton(把被觀察者的值賦值給觀察者)
// UITextField的rx.text屬性為ControlProperty類型杠园,實(shí)現(xiàn)了ControlPropertyType: ObservableType, ObserverType,所以不僅是觀察者類型舔庶,還是被觀察者類型
 _ = self.textF.rx.text .bindTo(self.btn.rx.title(for: .normal)) // 這樣文本框輸入的內(nèi)容就會自動設(shè)置成按鈕的標(biāo)題了抛蚁。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市惕橙,隨后出現(xiàn)的幾起案子瞧甩,更是在濱河造成了極大的恐慌,老刑警劉巖弥鹦,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肚逸,死亡現(xiàn)場離奇詭異,居然都是意外死亡彬坏,警方通過查閱死者的電腦和手機(jī)朦促,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苍鲜,“玉大人思灰,你說我怎么就攤上這事』焯希” “怎么了洒疚?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長坯屿。 經(jīng)常有香客問我油湖,道長,這世上最難降的妖魔是什么领跛? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任乏德,我火速辦了婚禮,結(jié)果婚禮上吠昭,老公的妹妹穿的比我還像新娘喊括。我一直安慰自己,他們只是感情好矢棚,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布郑什。 她就那樣靜靜地躺著,像睡著了一般蒲肋。 火紅的嫁衣襯著肌膚如雪蘑拯。 梳的紋絲不亂的頭發(fā)上钝满,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機(jī)與錄音申窘,去河邊找鬼弯蚜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛剃法,可吹牛的內(nèi)容都是我干的碎捺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼贷洲,長吁一口氣:“原來是場噩夢啊……” “哼牵寺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恩脂,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎趣斤,沒想到半個(gè)月后俩块,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浓领,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年玉凯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片联贩。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡漫仆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泪幌,到底是詐尸還是另有隱情盲厌,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布祸泪,位于F島的核電站吗浩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏没隘。R本人自食惡果不足惜懂扼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望右蒲。 院中可真熱鬧阀湿,春花似錦、人聲如沸瑰妄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翰撑。三九已至罩旋,卻和暖如春啊央,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涨醋。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工瓜饥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浴骂。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓乓土,卻偏偏與公主長得像,于是被迫代替她去往敵國和親溯警。 傳聞我的和親對象是個(gè)殘疾皇子趣苏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

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