SlideShare a Scribd company logo
1 of 22
Download to read offline
RxSwift
About me
4 宇佐見 公輔 (@usamik26)
4 フェンリル株式会社
4 iOS アプリエンジニア
4 0x29歳になりました
Reactive Programming
Reactive Programming
4 イベントや値の関係性(データフロー)を記述
4 その記述で、一方の変化を他方に伝播
4 メッセージ送信が隠 される
4 データバインディングは Reactive な仕組みといえる
Functional Reactive Programming
4 非同期データストリーム
4 時間軸に沿って値が流れるリスト
4 ストリームに対するリスト操作
4 map や filter といった関数型のイディオム
RP / FRP の利点
4 イベント駆動処理が書きやすい
4 非同期処理が書きやすい
4 GUI プログラミングと相性が良い
Reactive Programming for
iOS
Reactive Programming for iOS
4 ReactiveCocoa
4 ReactKit
4 RxSwift
4 ひとくちに Reactive といっても考え方がちょっとずつ違
う
4 それぞれに良さがある
RxSwift
RxSwift の特徴
4 ReactiveX ファミリー
4 最近正式に加わった
4 Swift ネイティブ
4 コア(RxSwift)は Swift のみ
4 一部(RxCocoa)は Objective-C を含む
ReactiveX
4 http://reactivex.io
4 各言語版がある
4 Rx.NET (C#)
4 RxJava
4 RxJS
4 RxSwift
4 ・・・など
4 Learn once, apply anywhere
RxSwift の導入
4 Dynamic Library として導入(iOS 8 以降)
4 CocoaPods
4 Carthage
4 プロジェクト内に組み込み(iOS 7 対応)
4 CocoaSeeds
RxSwift / RxCocoa
4 RxSwift
4 Observable / 各種 Operator / Scheduler など
4 RxCocoa
4 UIKit / NSURLSession / KVO など
Examples
Examples
4 以下を見るとよい
4 README
4 RxExample プロジェクト
Examples 1
combineLatest(firstNameLabel.rx_text, lastNameLabel.rx_text) {
$0 + " " + $1
}
>- map { "Greeting ($0)" }
>- subscribeNext { greeting in
greetingLabel.text = greeting
}
Examples 2
let userRequest: Observable<User> = API.getUser("me")
let friendsRequest: Observable<[Friend]> = API.getFriends("me")
zip(userRequest, friendsRequest) { user, friends in
return (user, friends)
}
>- observeOn(MainScheduler.sharedInstance)
>- subscribeNext { (user, friends) in
// bind to UI
}
Examples 3
searchTextField.rx_text
>- throttle(0.5, MainScheduler.sharedInstance)
>- distinctUntilChanged()
>- map { query in
API.getSearchResults(query)
>- retry(3)
>- startWith([])
>- catchError([])
}
>- switchLatest
>- map { results in
// bind to UI
}
Documents
4 ReactiveX 本家が分かりやすい
4 http://reactivex.io
4 RxSwift
4 Documentation/API.md など
RxSwift 2.0
RxSwift 2.0
4 現在開発中(Git ブランチ rxswift-2.0)
4 Swift 2 対応
4 演算子が >- から . に変更
4 内部ロジック : RxResult から try - catch に
RxSwift おすすめ

More Related Content

What's hot

Flux with RxSwift
Flux with RxSwiftFlux with RxSwift
Flux with RxSwiftYuji Hato
 
IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。
IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。
IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。Kohei Nishikawa
 
Redux, Relay, HorizonあるいはElm
Redux, Relay, HorizonあるいはElmRedux, Relay, HorizonあるいはElm
Redux, Relay, HorizonあるいはElmchuck h
 
AliEaters meetup#1 ド派手ダッシュボードDataVで遊んでみよう
AliEaters meetup#1 ド派手ダッシュボードDataVで遊んでみようAliEaters meetup#1 ド派手ダッシュボードDataVで遊んでみよう
AliEaters meetup#1 ド派手ダッシュボードDataVで遊んでみようShinya Mori (@mosuke5)
 
Kibanaでログを可視化してみた
Kibanaでログを可視化してみたKibanaでログを可視化してみた
Kibanaでログを可視化してみたDaigou Harada
 
implyを用いたアクセスログの可視化
implyを用いたアクセスログの可視化implyを用いたアクセスログの可視化
implyを用いたアクセスログの可視化Atsushi Hayakawa
 
grpc-gateway を試してみた fukuoka.go#11
grpc-gateway を試してみた fukuoka.go#11grpc-gateway を試してみた fukuoka.go#11
grpc-gateway を試してみた fukuoka.go#11Yutaka Tachibana
 
クラウド環境でのロギングと、AlibabaCloudでのロギングソリューション
クラウド環境でのロギングと、AlibabaCloudでのロギングソリューションクラウド環境でのロギングと、AlibabaCloudでのロギングソリューション
クラウド環境でのロギングと、AlibabaCloudでのロギングソリューションShinya Mori (@mosuke5)
 
それFluentdで! #fluentd
それFluentdで!  #fluentdそれFluentdで!  #fluentd
それFluentdで! #fluentdAtsuko Shibuya
 
知られざる。Alibaba Cloudを支えるテクノロジー (manabiya.tech)
知られざる。Alibaba Cloudを支えるテクノロジー (manabiya.tech)知られざる。Alibaba Cloudを支えるテクノロジー (manabiya.tech)
知られざる。Alibaba Cloudを支えるテクノロジー (manabiya.tech)Shinya Mori (@mosuke5)
 
Lambda in java_20160121
Lambda in java_20160121Lambda in java_20160121
Lambda in java_20160121Teruo Kawasaki
 
Reactive Systems と Back Pressure
Reactive Systems と Back PressureReactive Systems と Back Pressure
Reactive Systems と Back PressureAkihiro Ikezoe
 
RubyでGitHubをちょっと便利にする
RubyでGitHubをちょっと便利にするRubyでGitHubをちょっと便利にする
RubyでGitHubをちょっと便利にするnomlab
 
第一回Web技術勉強会 efkスタック編
第一回Web技術勉強会 efkスタック編第一回Web技術勉強会 efkスタック編
第一回Web技術勉強会 efkスタック編tzm_freedom
 

What's hot (20)

Flux with RxSwift
Flux with RxSwiftFlux with RxSwift
Flux with RxSwift
 
IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。
IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。
IBM Cloud 使ってタスク管理(JIRA Software)を運用してみた。
 
Redux, Relay, HorizonあるいはElm
Redux, Relay, HorizonあるいはElmRedux, Relay, HorizonあるいはElm
Redux, Relay, HorizonあるいはElm
 
AliEaters meetup#1 ド派手ダッシュボードDataVで遊んでみよう
AliEaters meetup#1 ド派手ダッシュボードDataVで遊んでみようAliEaters meetup#1 ド派手ダッシュボードDataVで遊んでみよう
AliEaters meetup#1 ド派手ダッシュボードDataVで遊んでみよう
 
Devfes kyoto2017
Devfes kyoto2017Devfes kyoto2017
Devfes kyoto2017
 
Kibanaでログを可視化してみた
Kibanaでログを可視化してみたKibanaでログを可視化してみた
Kibanaでログを可視化してみた
 
Rx Showcase
Rx ShowcaseRx Showcase
Rx Showcase
 
implyを用いたアクセスログの可視化
implyを用いたアクセスログの可視化implyを用いたアクセスログの可視化
implyを用いたアクセスログの可視化
 
grpc-gateway を試してみた fukuoka.go#11
grpc-gateway を試してみた fukuoka.go#11grpc-gateway を試してみた fukuoka.go#11
grpc-gateway を試してみた fukuoka.go#11
 
クラウド環境でのロギングと、AlibabaCloudでのロギングソリューション
クラウド環境でのロギングと、AlibabaCloudでのロギングソリューションクラウド環境でのロギングと、AlibabaCloudでのロギングソリューション
クラウド環境でのロギングと、AlibabaCloudでのロギングソリューション
 
それFluentdで! #fluentd
それFluentdで!  #fluentdそれFluentdで!  #fluentd
それFluentdで! #fluentd
 
Global Network on Alibaba Cloud
Global Network on Alibaba CloudGlobal Network on Alibaba Cloud
Global Network on Alibaba Cloud
 
知られざる。Alibaba Cloudを支えるテクノロジー (manabiya.tech)
知られざる。Alibaba Cloudを支えるテクノロジー (manabiya.tech)知られざる。Alibaba Cloudを支えるテクノロジー (manabiya.tech)
知られざる。Alibaba Cloudを支えるテクノロジー (manabiya.tech)
 
Lambda in java_20160121
Lambda in java_20160121Lambda in java_20160121
Lambda in java_20160121
 
Reactive
ReactiveReactive
Reactive
 
Connect with Data API
Connect with Data APIConnect with Data API
Connect with Data API
 
Reactive Systems と Back Pressure
Reactive Systems と Back PressureReactive Systems と Back Pressure
Reactive Systems と Back Pressure
 
RubyでGitHubをちょっと便利にする
RubyでGitHubをちょっと便利にするRubyでGitHubをちょっと便利にする
RubyでGitHubをちょっと便利にする
 
第一回Web技術勉強会 efkスタック編
第一回Web技術勉強会 efkスタック編第一回Web技術勉強会 efkスタック編
第一回Web技術勉強会 efkスタック編
 
20141220 clrh etw
20141220 clrh etw20141220 clrh etw
20141220 clrh etw
 

More from 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
 

More from 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