[RxSwift] #5 Variable & BehaviorRelay


1.作りたいもの:チェックボックス
@IBAction checkButtonTouched(sender: UIButton) {
    sender.isSelected = !sender.isSelected
    activateButton(isSelected: sender.isSelected)
}
最初からRxSWIFTにするのは無理そうなので、まずビューを組み、動作が正しいかどうかを確認してからRxSWIFTに再包装します.
RxCocoaにはcheckButton.rx.tapという良い方法がありますが、sender.isSelectedは表現できません.
2. Variable
だから探しているうちに、Variableを使って、私が望んでいる機能を実現するソースコードを見つけました.多分理解できますが、これはどういう意味ですか.思い出した.
let checkBoxValid = Variable(true)

checkBoxValid.asObservable()
    .bindTo(checkBoxButton.rx.isSelected)
    .disposed(by: disposeBag)

checkBoxButton.rx.tap
    .subscribe(onNext: {
    checkBoxValid.value = !checkBoxValid.value
    })
    .disposed(by: disposeBag)
出典:https://github.com/ReactiveX/RxSwift/issues/1172
ここです。学習後に発見されました.
ValaiableはBehaviorSubjectの現在値をStateとしている奴です.彼はまた、普通の値を観測可能な値に見せるために使用しただけだと説明した.
だから上のコードのようです.
  • Variable(true)この値は可変値で囲まれている
  • この値をsubscribeに設定する場合は、.asObservable()で観測可能な値と見なさなければなりません.
  • 値を取り出したり、新しい値を入力したりする場合は、.onNext()ではなくcheckBoxValie.valueを使用します.
  • エラーが発生しないことを保証し、割り当て解除時に自動的に完了するため、.value.onErrorも不要です.
  • 以下のすべての場合に使用できます.
  • 受信値のみ(観測可能値など)
  • Subjectのように値を交換
  • 購読する必要はなく、1つの値(上記の通常値を観測可能値として使用する)
  • 3. BehaviorRelay
    しかし、VariableはBehaviorRelayの使用を警告されたため、BehaviorRelayでコードを修正した.
    // checkButton : 위의 깃헙 코드를 BehaviorRelay로 바꿈.
    // checkButtonIsSelected 라는 observable 만들어서,
    // checkButton.isSelected 해당 relay를 구독하게 하면 된다.
    // 버튼 누르면 checkButtonIsSelected 에 정보 보내서 바뀌게.
    let checkButtonIsSelected = BehaviorRelay(value: false)
    checkButtonIsSelected.asObservable()
      .bind(to: checkButton.rx.isSelected)
      .disposed(by: disposeBag)
    
    _ = checkButton.rx.tap
      .subscribe(onNext:  {
        checkButtonIsSelected.accept(!checkButtonIsSelected.value)
        self.activateButton(isSelected: checkButtonIsSelected.value)
      })
      .disposed(by: disposeBag)
    なぜVariableではなくBehaviorRelayを使うのですか?
    Varaibleは意外にも値を変更する可能性があり、その名前もRxSwiftの約束と一致せず、メモリ管理にもあまり有効ではないことを示しています.Variableは直感的な名前なので分かりやすいと思いますが、コードを変えて、Relayという概念を知っていれば、難しくはありません.
    +
    実習生の時、会社のプロジェクトは
  • customView : xib + SnapKit
  • RxSwift
  • viper design pattern
  • 使用したことを知りました.面接の時も2、3回聞いたことがありますが、全部勉強するのは難しいので、RxSWIFTの4時間の授業を先に聞きました.でも….出勤する時1週間の既存のコードを見て、簡単な画面を実現して、rxが熊先生の講義ほど簡単ではないことを発見しました.また,しばらくの間,コードベースでビューを位置決めしxibを用いることは,利点と欠点が明確である.
    だから私はいろいろなソースを探しています.
    RxSWIFTは宝英の整理Sourceがよく勉強して実現していると思っています.GITGETがとても上手に書いてくれたのはこちらが作ったの…!!
    仕事が終わってからブログを書く時間がないけど...がんばって!