質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
RxSwift

RxSwiftは、Reactive ExtensionsのSwift向けの実装です。iOS開発に用いられ、リアクティブプログラミングを可能にします。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

690閲覧

Rxswift オブザーバーのsubscribeについて

sportsgari

総合スコア18

RxSwift

RxSwiftは、Reactive ExtensionsのSwift向けの実装です。iOS開発に用いられ、リアクティブプログラミングを可能にします。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/01/09 00:36

編集2020/01/22 08:18

オブザーバーのsubscribeについて質問があります。
一度だけsubscribeを行いたいのですが、現在subscribeしているかどうかを確認する方法はありますでしょうか。
現在は、下記ソースのようにフラグを使って制御しているのですが、確認する方法があるのであれば変更したいと思っています。

swift

1 if firstlogout == true { 2 deviceRepository?.observableLogoutStatus?.subscribe({ event in 3 4 if event.element != nil && event.element! { 5 self.unbind(navigation: navigation) 6 } 7 }).disposed(by: disposeBag!) 8 firstlogout = false 9 } 10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

現在subscribeしているかどうかを確認する方法はありますでしょうか

これはないと思います。
というのも、 subscribeは定義のように書くべきで、初期化時などに一度だけ実行する想定がされているからだと思います。
言い換えると、同じオブジェクトの中で何度も同じ subscribe が実行する書き方は想定されてないものという意味です。

例えば ViewController で書くのであれば、

swift

1func viewDidLoad() { // ViewController なら viewDidLoad はライフサイクルで一度しか呼ばれない 2 // ... 3 4 // 例えば ViewController の初期化時に1度だけ実行するなら 5 deviceRepository?.observableLogoutStatus? 6 .subscribe({ event in /* ... */ }) 7 .disposed(by: disposeBag) 8 9 // ボタンのタップによって実行するなら 10 buttonView.rx.tap.asDriver() 11 .flatMapLatest { _ in deviceRepository?.observableLogoutStatus } 12 .drive { event in /* ... */ } 13 .disposed(by: disposeBag) 14 15 // その他イベント ( BehaviorRelay や PublishRelay等 ) によって実行する 16 behaviorRelay 17 .flatMapLatest { _ in deviceRepository?.observableLogoutStatus } 18 .subscribe { event in /* ... */ } 19 .disposed(by: disposeBag) 20}

のように、イベントに対して flatMapLatest するように書けば、初期化時に1度だけ subscribe すればよいという風になります。
また、そのような書き方こそが宣言的で読みやすいコードとなるので、 RxSwift を利用するメリットになっているのかと思いますmm

投稿2020/01/25 18:48

unhappychoice

総合スコア1531

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sportsgari

2020/01/26 23:35

勉強になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問