Rxswift入坑系列(2)

  • rx 不建議開始就硬要把基礎(chǔ)的啃透了在入手
  • 只需要看的懂做了什么,做完有什么效果可以先入手一些實(shí)戰(zhàn)了.
  • 模仿官方demo 使用rxcocoa 來構(gòu)建你的項(xiàng)目.并使用,使用完畢你會(huì)有一點(diǎn)懂了.但是越用你會(huì)越不懂(這個(gè)我寫到后面應(yīng)該會(huì)體會(huì)更深..畢竟菜鳥級(jí)別現(xiàn)在)
  • demo1 中使用
Observable.combineLatest(number1.rx.text.orEmpty, number2.rx.text.orEmpty, number3.rx.text.orEmpty) { textValue1, textValue2, textValue3 -> Int in
                return (Int(textValue1) ?? 0) + (Int(textValue2) ?? 0) + (Int(textValue3) ?? 0)
            }
            .map { $0.description }
            .bind(to: result.rx.text)
            .disposed(by: disposeBag)

完成了一個(gè)實(shí)用的加法器.非常簡潔,rx.text.orEmpty轉(zhuǎn)到定義看四個(gè)observerble 的類型,大致可以看到在rx中我們把數(shù)據(jù)全部當(dāng)成了observerble類型去處理.從這里我們看出一個(gè)思想,Observable內(nèi)置許多的函數(shù)會(huì)很方便構(gòu)建需要的事件流,這個(gè)東西表象上就是將數(shù)據(jù)本身加上一個(gè)時(shí)間的維度,太抽象了 惡心,時(shí)間維度個(gè)人理解在程序上就是一個(gè)監(jiān)聽者,它會(huì)默默的一直(時(shí)間)幫你看查一個(gè)數(shù)據(jù)的變化,Observable 將整個(gè)變化封裝成了一個(gè)序列,數(shù)據(jù)的流,每一次變化,數(shù)據(jù)會(huì)流出來,你在閉包內(nèi)處理這個(gè)流就OK了.

  • demo2

let   phonevalid = txtphone.rx.text.orEmpty.map { $0.characters.count == self.validnumber   }.share(replay: 1)
       
       let   pwdvalid = txtpwd.rx.text.orEmpty.map { $0.characters.count == self.pwdnumber }.share(replay: 1)
       
       let   everthingvalid = Observable.combineLatest(phonevalid, pwdvalid) { $0 && $1 }.share(replay: 1)
       everthingvalid.bind(to: btnlogin.rx.isEnabled).disposed(by: disposeBag)
       
       everthingvalid.subscribe(onNext: { (ok) in
           print(ok)
           ok ? self.btnnormal():self.btnforbidden()
       }, onError: nil, onCompleted: nil, onDisposed: nil).disposed(by: disposeBag)
       btnlogin.rx.tap
           .subscribe(onNext: { [weak self] _ in
               
             //去登錄
               
               
        })
      .disposed(by: disposeBag)

登錄的驗(yàn)證操作是些很繁雜的事情.rxcocoa 幫我們在ui上的好多東西構(gòu)建了好了,如rx.text等等,bind 時(shí)將一個(gè)序列鏈接上另一個(gè)序列,a 返回的結(jié)果可以作為b的一個(gè)序列,如當(dāng)我們希望郵箱合法時(shí),讓textfield文本框做一些變化,傳統(tǒng)上我們都直接各種代理實(shí)現(xiàn),回調(diào)函數(shù)中處理讓textfiled 做變化。
有了rxcocoa 可以

import  Rxswift
import  Rxcocoa
let   phonevalid = txtphone.rx.text.orEmpty.map { $0.characters.count == 11  }.share(replay: 1)
extension  UITextField{
    var showview:AnyObserver<Bool>{
        return Binder(self) { textfield, valid in
            
            textfield.backgroundColor =  UIColor.red
            
            }.asObserver()
    }
    
}
phonevalid
            .bind(to: passwordOutlet.rx.isEnabled)
            .disposed(by: disposeBag)
 everthingvalid.subscribe({ (ok) in
            
            ok ?  去登:驗(yàn)證不通過
       })
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容