[RxSwift] #5 Variable & BehaviorRelay
1.作りたいもの:チェックボックス
RxCocoaには
2. Variable
だから探しているうちに、Variableを使って、私が望んでいる機能を実現するソースコードを見つけました.多分理解できますが、これはどういう意味ですか.思い出した.
ここです。学習後に発見されました.
ValaiableはBehaviorSubjectの現在値をStateとしている奴です.彼はまた、普通の値を観測可能な値に見せるために使用しただけだと説明した.
だから上のコードのようです.この値を 値を取り出したり、新しい値を入力したりする場合は、 エラーが発生しないことを保証し、割り当て解除時に自動的に完了するため、 以下のすべての場合に使用できます.受信値のみ(観測可能値など) Subjectのように値を交換 購読する必要はなく、1つの値(上記の通常値を観測可能値として使用する) 3. BehaviorRelay
しかし、VariableはBehaviorRelayの使用を警告されたため、BehaviorRelayでコードを修正した.
Varaibleは意外にも値を変更する可能性があり、その名前もRxSwiftの約束と一致せず、メモリ管理にもあまり有効ではないことを示しています.Variableは直感的な名前なので分かりやすいと思いますが、コードを変えて、Relayという概念を知っていれば、難しくはありません.
+
実習生の時、会社のプロジェクトは customView : xib + SnapKit RxSwift viper design pattern 使用したことを知りました.面接の時も2、3回聞いたことがありますが、全部勉強するのは難しいので、RxSWIFTの4時間の授業を先に聞きました.でも….出勤する時1週間の既存のコードを見て、簡単な画面を実現して、rxが熊先生の講義ほど簡単ではないことを発見しました.また,しばらくの間,コードベースでビューを位置決めしxibを用いることは,利点と欠点が明確である.
だから私はいろいろなソースを探しています.
RxSWIFTは宝英の整理Sourceがよく勉強して実現していると思っています.GITGETがとても上手に書いてくれたのはこちらが作ったの…!!
仕事が終わってからブログを書く時間がないけど...がんばって!
@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
も不要です.しかし、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という概念を知っていれば、難しくはありません.
+
実習生の時、会社のプロジェクトは
だから私はいろいろなソースを探しています.
RxSWIFTは宝英の整理Sourceがよく勉強して実現していると思っています.GITGETがとても上手に書いてくれたのはこちらが作ったの…!!
仕事が終わってからブログを書く時間がないけど...がんばって!
Reference
この問題について([RxSwift] #5 Variable & BehaviorRelay), 我々は、より多くの情報をここで見つけました https://velog.io/@ddosang/RxSwift-5-Variable-BehaviorRelayテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol