Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
18
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@muukii

[RxSwift] 次のmapに任意のオブジェクトを渡す方法

RxSwiftにて、複数の処理を連結して、特定の結果を得たい場合に
mapを複数連結させ、次のmapに任意のオブジェクトも付与して渡したい、というケースも多いと思います。
例えば、複数の非同期処理があって、それぞれ順番に実行し、必要な情報が全部揃ったら、最後の処理を実行する。というイメージです。

このような場合は、mapを利用することで実現出来ます。

create
    { (observer: AnyObserver<Int>) in

        observer.onNext(1)
        observer.onCompleted()
        return NopDisposable.instance
    }
    .flatMap { value in

        return create { (observer: AnyObserver<Int>) in

            observer.onNext(value)
            observer.onCompleted()
            return NopDisposable.instance
            }
            .map { ($0, 2) }
    }
    .map { value, value2 in

        return (value, value2, 3)
    }
    .subscribe { event in

        switch event {
        case .Next(let value1, let value2, let value3):
            print(value1, value2, value3)
        case .Error(let error):
            print(error)
        case .Completed:
            print("completed")
        }
}

出力

1 2 3

mapは Transforming Observables と定義されており、
イベントの流れの形状を変更する事に使えます。

Swiftではタプルが使えるため、このような記述が実現出来ています。
RxSwiftのmapはかなり便利なので、使用頻度は高くなりそうですね!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
18
Help us understand the problem. What are the problem?