[iOS]-RxSWIFT入門(4)


RxCocoa


今回のリリースでは、RxCocoaを使用したログインシステムについて説明します.
UIは次のように構成されています.
Email、Password TextField、および
異なる形式のEメール、Password Valid View(赤点)
そして最後.
Emailとpasswordのフォーマットが同じ場合、Loginが表示されます.
またはFill the Fieldsに表示されるログインボタンです.

コード#コード#

        idField.rx.text.orEmpty
            .map(checkEmailValid)
            .subscribe(onNext: { s in
                self.idValidView.isHidden = s
        })
        .disposed(by: disposeBag)
idField形式のコードを確認します.
もちろん「非同期」で実現します.
実際、今回の講座を聞く前に、動機や非同期について多くの話を聞いたことがありますが、実際のアプリケーションでの応用方法に疑問があります.今回は少し緩和されたようです.
idField.rx.text:idFieldのtextが非同期で処理するコード.
.orEmpty:filter{$0!=nil}とmap{$0!}と同じコードです.外来処置
checkEmailValid関数は単独で記述されています.
簡単に.contain("@"), .contain(".")で...
subscribeで表示される値は、
Bool形式で表示される値self.isValidView.isHiddenに適用すると、
idFieldのtextは変更するたびに非同期です!sが変化していることがわかる.

Q.Delegateとの差が少ない…?


コード作成、特にTextFieldではDelegateによく似ていると思います.RxSWIFT、RxCocoaを使用して上記のコードを記述しない場合は、先にViewControllerでUItextfieldDelegateを拡張してから、TextfieldEndEditingでコードを記述することができます.
そこでグーグルを試してみると
Delegateで非同期処理を行うそうです.
思えばCollectionViewとTable ViewもDelegateで非同期処理を行っていた.Table View関数またはCollectionView関数の関数は自動的に処理されます.
私がデータベースとして使用しているFirebaseで使用しているObserverやObserverSingleEvent関数は、最後に考えると非同期処理をしていると思います.

Combine


idFieldの非同期処理コードが見られると,pwFieldの非同期処理を手間なく行うことができる.
        idField.rx.text.orEmpty
            .map(checkEmailValid)
            .subscribe(onNext: { s in
                self.idValidView.isHidden = s
        })
        .disposed(by: disposeBag)
        
        pwField.rx.text.orEmpty
            .map(checkPasswordValid)
            .subscribe(onNext: { s in
                self.pwValidView.isHidden = s
        })
        .disposed(by: disposeBag)
        
では、今から登録ボタンを考えてみましょう.
上記2つの観測可能な項目がtrueの場合、Loginを表示します.
コードを表示します.
        Observable.combineLatest(
            idField.rx.text.orEmpty.map(checkEmailValid),
            pwField.rx.text.orEmpty.map(checkPasswordValid),
        resultSelector: { s1, s2 in s1 && s2 }
        )
        .subscribe(onNext: { b in
            self.loginButton.isEnabled = b
        })
        .disposed(by: disposeBag)
2人の傍観者を発表した後、戻りセレクタで購読すればいいです.
今回はやっぱりselfloginButton.isEnabledに適用します.
非同期で、値を変更するたびにDelegateのように変更されたLoginボタンを表示できます.
では、これまで学んだコードをより簡単に使用する方法について説明します.

Simple


まず、idを作成してtextfieldの観測性を作成します.

名前はidInputOb idFieldrxを打って、
戻り値はReactive形式で表示されます.おもしろい

text入力後、ControlProperty、
コントロールするオブジェクトのようです.
observableがほしいのでasobservable()を入力します.
そして赤い点にも傍観者バブルを作ります.

パスワードも完了しました.
作成した観察可能なサブスクリプションを彼らに渡しましょう.

これはisHiddenに適用されます
2人の傍観者Bubbleを組み合わせて、ログインボタンに貼り付けます.

これは先ほど書いたコードと同じ非同期処理を行うコードになります.
確かに、より多くの観測性を含むコードでは、より分かりやすい.