SlideShare une entreprise Scribd logo
1  sur  19
Télécharger pour lire hors ligne
RxSwift x APIKit
About me
4 宇佐見 公輔 (@usamik26)
4 フェンリル株式会社
4 iOS アプリエンジニア
今回の内容
4 最近 RxSwift 推し
4 APIKit も使ってる
4 組み合わせて使うといいよ
関連 : 以前の関モバで発表した内容
関連 : Realm meetup で発表した内容
RxSwift とは
RxSwift とは
4 Reactive Programming のためのライブラリ
4 ReacticeX ファミリー
4 Rx.NET / RxJS / RxJava / ...
例:イベント処理
button.rx_tap
.subscribeNext { _ in
// ボタンがタップされたときの処理
}
.addDisposableTo(disposeBag)
例:非同期処理
URLSession.rx_response(request)
.subscribeOn(sessionScheduler)
.map { (data, response) in
// バックグラウンド処理
}
.observeOn(mainScheduler)
.map { data in
// UI処理
}
APIKit とは
APIKit とは
4 Web API 通信のためのライブラリ
4 Swift を生かして簡潔に実装できる
API クライアント実装側のコード
protocol HogeAPIRequest: Request {}
extension HogeAPIRequest {
var baseURL: NSURL { return NSURL(...) }
}
struct HogeAPI {
struct HogeRequest: HogeAPIRequest {
typealias Response = HogeResponse
}
struct HogeResponse { ... }
}
API クライアント利用側のコード
let request = HogeAPI.HogeRequest(...)
API.sendRequest(request) { result in
switch result {
case .Failure(let error):
// 失敗時の処理
case .Success(let response):
// 成功時の処理
}
}
RxSwift x APIKit
APIKit を Rx に対応させたい
4 NSURLSession の rx_response のノリで
NSURLSession の実装を参照する
func rx_response(request: NSURLRequest) -> Observable<NSData!, NSURLResponse!> {
return create { observer in
// request を送信してレスポンスを受け取る
if 失敗 {
observer.on(.Error(error))
} else {
observer.on(.Next(data, response))
observer.on(.Completed)
}
return AnonymousDisposable { /* キャンセル処理 */ }
}
}
APIKit 版
func responseFrom<T: AppAPIRequest>(request: T) -> Observable<T.Response> {
return create { (observer: ObserverOf<T.Response>) in
API.sendRequest(request) { result in
switch result {
case .Failure(let error):
observer.on(.Error(error))
case .Success(let response):
observer.on(.Next(response))
observer.on(.Completed)
}
}
return AnonymousDisposable { API.cancelRequest(T) }
}
}
使い方
let request = HogeAPI.HogeRequest(...)
HogeAPI.responseFrom(request)
.subscribeOn(sessionScheduler)
.map { (data, response) in
// バックグラウンド処理
}
.observeOn(mainScheduler)
.map { data in
// UI処理
}
ふりかえり
4 簡単に実装できた
4 便利
4 あれ、Result 型の意味は?
4 Rx の実装の中でしか使われなくなったけど・・・
4 エラーハンドリングは RxSwift でやればいい

Contenu connexe

Tendances

大規模ログ集約実現のためのアーキテクチャ
大規模ログ集約実現のためのアーキテクチャ大規模ログ集約実現のためのアーキテクチャ
大規模ログ集約実現のためのアーキテクチャYugo Shimizu
 
RxJava on Android
RxJava on AndroidRxJava on Android
RxJava on Androidyo_waka
 
Serverless apps on aws using scala
Serverless apps on aws using scalaServerless apps on aws using scala
Serverless apps on aws using scalaYoshitaka Fujii
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築Masashi Shinbara
 
grpc-gateway を試してみた fukuoka.go#11
grpc-gateway を試してみた fukuoka.go#11grpc-gateway を試してみた fukuoka.go#11
grpc-gateway を試してみた fukuoka.go#11Yutaka Tachibana
 
第5回Sql server2017勉強会資料
第5回Sql server2017勉強会資料第5回Sql server2017勉強会資料
第5回Sql server2017勉強会資料TakenoriIijima
 
Miyazaki Resistanceを作ってみたよ
Miyazaki Resistanceを作ってみたよMiyazaki Resistanceを作ってみたよ
Miyazaki Resistanceを作ってみたよTsukasa Oishi
 
Reactive Systems と Back Pressure
Reactive Systems と Back PressureReactive Systems と Back Pressure
Reactive Systems と Back PressureAkihiro Ikezoe
 
Redux, Relay, HorizonあるいはElm
Redux, Relay, HorizonあるいはElmRedux, Relay, HorizonあるいはElm
Redux, Relay, HorizonあるいはElmchuck h
 
ネットワークこわい
ネットワークこわいネットワークこわい
ネットワークこわいMasahiro Tomita
 
Bundler 2 の胎動
Bundler 2 の胎動Bundler 2 の胎動
Bundler 2 の胎動Koichi ITO
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2Masashi Shinbara
 
Alibaba Cloud Serverless
Alibaba Cloud ServerlessAlibaba Cloud Serverless
Alibaba Cloud Serverless真吾 吉田
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!K Kinzal
 
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda都元ダイスケ Miyamoto
 

Tendances (20)

大規模ログ集約実現のためのアーキテクチャ
大規模ログ集約実現のためのアーキテクチャ大規模ログ集約実現のためのアーキテクチャ
大規模ログ集約実現のためのアーキテクチャ
 
RxJava on Android
RxJava on AndroidRxJava on Android
RxJava on Android
 
Serverless apps on aws using scala
Serverless apps on aws using scalaServerless apps on aws using scala
Serverless apps on aws using scala
 
Devfes kyoto2017
Devfes kyoto2017Devfes kyoto2017
Devfes kyoto2017
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 
grpc-gateway を試してみた fukuoka.go#11
grpc-gateway を試してみた fukuoka.go#11grpc-gateway を試してみた fukuoka.go#11
grpc-gateway を試してみた fukuoka.go#11
 
第5回Sql server2017勉強会資料
第5回Sql server2017勉強会資料第5回Sql server2017勉強会資料
第5回Sql server2017勉強会資料
 
Miyazaki Resistanceを作ってみたよ
Miyazaki Resistanceを作ってみたよMiyazaki Resistanceを作ってみたよ
Miyazaki Resistanceを作ってみたよ
 
Starting java fx
Starting java fxStarting java fx
Starting java fx
 
Reactive Systems と Back Pressure
Reactive Systems と Back PressureReactive Systems と Back Pressure
Reactive Systems と Back Pressure
 
CSV
CSVCSV
CSV
 
Redux, Relay, HorizonあるいはElm
Redux, Relay, HorizonあるいはElmRedux, Relay, HorizonあるいはElm
Redux, Relay, HorizonあるいはElm
 
Reactive
ReactiveReactive
Reactive
 
ネットワークこわい
ネットワークこわいネットワークこわい
ネットワークこわい
 
Bundler 2 の胎動
Bundler 2 の胎動Bundler 2 の胎動
Bundler 2 の胎動
 
Ruby風Swift NSOperation編
Ruby風Swift NSOperation編Ruby風Swift NSOperation編
Ruby風Swift NSOperation編
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
 
Alibaba Cloud Serverless
Alibaba Cloud ServerlessAlibaba Cloud Serverless
Alibaba Cloud Serverless
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
 
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
 

Similaire à RxSwift x APIKit

実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive ExtensionsShin Ise
 
オブジェクト指向な人がRx swiftを試してみた
オブジェクト指向な人がRx swiftを試してみたオブジェクト指向な人がRx swiftを試してみた
オブジェクト指向な人がRx swiftを試してみた小林 弘明
 
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)Fumiya Sakai
 
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.SmartNews, Inc.
 
node-handlersocket
node-handlersocketnode-handlersocket
node-handlersocketkoichik
 
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)Takahiro Yonei
 
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworkerおれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworkerToshiaki Maki
 
ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版Fumiya Sakai
 
Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-recotech
 
Reactive Extensions v2.0
Reactive Extensions v2.0Reactive Extensions v2.0
Reactive Extensions v2.0Yoshifumi Kawai
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
React+redux+saga 03
React+redux+saga 03React+redux+saga 03
React+redux+saga 03TIS Inc
 
Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携Shinichi Tomita
 
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptlinq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptYoshifumi Kawai
 

Similaire à RxSwift x APIKit (20)

実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
 
オブジェクト指向な人がRx swiftを試してみた
オブジェクト指向な人がRx swiftを試してみたオブジェクト指向な人がRx swiftを試してみた
オブジェクト指向な人がRx swiftを試してみた
 
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
 
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
 
node-handlersocket
node-handlersocketnode-handlersocket
node-handlersocket
 
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
 
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworkerおれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
 
ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版
 
Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-
 
Nginx
NginxNginx
Nginx
 
Reactive Extensions v2.0
Reactive Extensions v2.0Reactive Extensions v2.0
Reactive Extensions v2.0
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
Reactの全体像と新しい情報を収集する方法
Reactの全体像と新しい情報を収集する方法Reactの全体像と新しい情報を収集する方法
Reactの全体像と新しい情報を収集する方法
 
React+redux+saga 03
React+redux+saga 03React+redux+saga 03
React+redux+saga 03
 
Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携
 
How To Drink Wsgi
How To Drink WsgiHow To Drink Wsgi
How To Drink Wsgi
 
Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
 
MlnagoyaRx
MlnagoyaRxMlnagoyaRx
MlnagoyaRx
 
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptlinq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScript
 
JavaScriptとCollection
JavaScriptとCollectionJavaScriptとCollection
JavaScriptとCollection
 

Plus de Kosuke Usami

View 系ライブラリに関する悩み
View 系ライブラリに関する悩みView 系ライブラリに関する悩み
View 系ライブラリに関する悩みKosuke Usami
 
Xamarin で Apple Watch アプリを作る
Xamarin で Apple Watch アプリを作るXamarin で Apple Watch アプリを作る
Xamarin で Apple Watch アプリを作るKosuke Usami
 
iBeacon Applications
iBeacon ApplicationsiBeacon Applications
iBeacon ApplicationsKosuke Usami
 
JXUG Conference 2 West
JXUG Conference 2 WestJXUG Conference 2 West
JXUG Conference 2 WestKosuke Usami
 
すごいHaskell読書会
すごいHaskell読書会すごいHaskell読書会
すごいHaskell読書会Kosuke Usami
 
Semantic Versioning
Semantic VersioningSemantic Versioning
Semantic VersioningKosuke Usami
 
Mac アプリの Retina 対応
Mac アプリの Retina 対応Mac アプリの Retina 対応
Mac アプリの Retina 対応Kosuke Usami
 
Mountain Lion Sharing Service
Mountain Lion Sharing ServiceMountain Lion Sharing Service
Mountain Lion Sharing ServiceKosuke Usami
 
OS X LionのVersions対応
OS X LionのVersions対応OS X LionのVersions対応
OS X LionのVersions対応Kosuke Usami
 

Plus de Kosuke Usami (17)

SnapKit
SnapKitSnapKit
SnapKit
 
View 系ライブラリに関する悩み
View 系ライブラリに関する悩みView 系ライブラリに関する悩み
View 系ライブラリに関する悩み
 
Auto Layout Tips
Auto Layout TipsAuto Layout Tips
Auto Layout Tips
 
Eddystone Beacon
Eddystone BeaconEddystone Beacon
Eddystone Beacon
 
Xamarin で Apple Watch アプリを作る
Xamarin で Apple Watch アプリを作るXamarin で Apple Watch アプリを作る
Xamarin で Apple Watch アプリを作る
 
iBeacon Applications
iBeacon ApplicationsiBeacon Applications
iBeacon Applications
 
APIKit
APIKitAPIKit
APIKit
 
Swift Library
Swift LibrarySwift Library
Swift Library
 
JXUG Conference 2 West
JXUG Conference 2 WestJXUG Conference 2 West
JXUG Conference 2 West
 
すごいHaskell読書会
すごいHaskell読書会すごいHaskell読書会
すごいHaskell読書会
 
Xamarin.iOS
Xamarin.iOSXamarin.iOS
Xamarin.iOS
 
CotEditor Script
CotEditor ScriptCotEditor Script
CotEditor Script
 
Affine Transform
Affine TransformAffine Transform
Affine Transform
 
Semantic Versioning
Semantic VersioningSemantic Versioning
Semantic Versioning
 
Mac アプリの Retina 対応
Mac アプリの Retina 対応Mac アプリの Retina 対応
Mac アプリの Retina 対応
 
Mountain Lion Sharing Service
Mountain Lion Sharing ServiceMountain Lion Sharing Service
Mountain Lion Sharing Service
 
OS X LionのVersions対応
OS X LionのVersions対応OS X LionのVersions対応
OS X LionのVersions対応
 

RxSwift x APIKit