社内勉強会で「入門 ReactiveSwift」というタイトルで発表をしました。
↓スライド資料です。
なんと 191 ページもあります。
ReactiveSwift はまだまだ日本語の資料が少ないですからせっかくなので公開しました。
もっと使う人が増えればいいのですが…。
機会があれば ReactiveCocoa のことにも触れたり実践的な内容を取り扱ったりしたいです。
ちなみに発表時間は 50 分でした。
くちパッサパサになりましたよ。
社内勉強会で「入門 ReactiveSwift」というタイトルで発表をしました。
↓スライド資料です。
なんと 191 ページもあります。
ReactiveSwift はまだまだ日本語の資料が少ないですからせっかくなので公開しました。
もっと使う人が増えればいいのですが…。
機会があれば ReactiveCocoa のことにも触れたり実践的な内容を取り扱ったりしたいです。
ちなみに発表時間は 50 分でした。
くちパッサパサになりましたよ。
今日は ReactiveSwift と APIKit を組み合わせてみます。
いきなりですが以下のようなコードになります。
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>
Swift のリアクティブプログラミングのライブラリといえば RxSwift か ReactiveSwift が有名ですよね。
今まで RxSwift しか使ってこなかったのですが ReactiveSwift を使ってみたらとても良かったのでそれについて書きたいと思います。
ReactiveSwift と RxSwift を比較する形で紹介します。
RxSwift やその他 Rx
ライブラリをある程度自由に使いこなせるという方を対象に書いています。