「入門 ReactiveSwift 」という発表をした

社内勉強会で「入門 ReactiveSwift」というタイトルで発表をしました。
↓スライド資料です。

なんと 191 ページもあります。

ReactiveSwift はまだまだ日本語の資料が少ないですからせっかくなので公開しました。
もっと使う人が増えればいいのですが…。

機会があれば ReactiveCocoa のことにも触れたり実践的な内容を取り扱ったりしたいです。

ちなみに発表時間は 50 分でした。
くちパッサパサになりましたよ。

ReactiveSwift と APIKit を組み合わせる

今日は ReactiveSwiftAPIKit を組み合わせてみます。

いきなりですが以下のようなコードになります。

extension Session: ReactiveExtensionsProvider { }

extension Reactive where Base: Session {
    
    func send<Request>(_ request: Request) -> SignalProducer<Request.Response, SessionTaskError> where Request: APIKit.Request {
        return SignalProducer { [weak base] observer, lifetime in
            guard let session = base else {
                observer.sendInterrupted()
                return
            }
            
            let task = session.send(request) { result in
                switch result {
                case .success(let response):
                    observer.send(value: response)
                    observer.sendCompleted()
                case .failure(let sessionTaskError):
                    observer.send(error: sessionTaskError)
                }
            }
            
            lifetime.observeEnded {
                task?.cancel()
            }
        }
    }
}

let request = AppRequest(name: "おとなのおこづかい帳")
Session.shared.reactive.send(request).startWithResult { result in
    switch result {
    case .success(let app):
        print(app.review == "★★★★★")
    case .failure(let sessionTaskError):
        print(sessionTaskError)
    }
}

RxSwift 版を参考にしました。

ReactiveSwift にはエラーの型が指定できるので RxSwift とくらべてエラーハンドリングしやすそうですね。

// RxSwift
func send<Request>(_ request: Request) -> Observable<Request.Response>

// ReactiveSwift
func send<Request>(_ request: Request) -> SignalProducer<Request.Response, SessionTaskError>

ReactiveSwift もいいぞという話

Swift のリアクティブプログラミングのライブラリといえば RxSwiftReactiveSwift が有名ですよね。

今まで RxSwift しか使ってこなかったのですが ReactiveSwift を使ってみたらとても良かったのでそれについて書きたいと思います。

ReactiveSwift と RxSwift を比較する形で紹介します。

RxSwift やその他 Rx ライブラリをある程度自由に使いこなせるという方を対象に書いています。

続きを読む