Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
RxSwift
USAMI Kosuke (Fenrir Inc.)
RxSwift
ReactiveX for Swift
→ ReactiveX family : Rx.NET / RxJS / RxJava / ...
RxSwift Released!
2.0.0 : 2016/01/02
(Latest release = 2.1.0 : 2016/01/11)
5分でわかる
RxSwift
とりあえず使
ってみるため
の知識
とりあえず使ってみるための知識
→ Observable
→ Subscribe
→ Error Handling
Observable
Observable
→ 非同期データストリーム
→ UI からのアクション
→ OS からの Notification
→ URL セッションのレスポンス
Observable の要素
→ Next
→ Completed
→ Error
Next
→ case .Next(let value)
→ value = ストリーム内のデータ
Completed
→ case .Completed
→ ストリームの終わり
→ 明示的な終わりがないストリームもある
Error
→ case .Error(let error)
→ error = ErrorType 型の値
→ ストリームの終わりでもある
Observable の生成
→ Observable.create などで生成
→ RxCocoa が用意している rx_tap /
rx_notification / rx_response / ...
Subscribe
Subscribe
→ ストリームからデータを受け取る
→ subscribeNext
→ subscribeCompleted
→ subscribeError
例 : UIButton アクション
hogeButton.rx_tap
.subscribeNext { [unowned self] _ in
self.hoge()
}
例 : NSNotification
let center = NSNotificationCenter.defaultCenter()
center.rx_notification(UIApplicationDidBecomeActiveNot...
例 : NSURLSession
let session: NSURLSession = ...
let request = NSURLRequest(...)
session.rx_response(request)
.subscribeNe...
Error
Handling
catchError
hogeObservable
.catchError { error in
...
}
.subscribeNext {
...
}
retry
hogeObservable
.retry(3) // 3回までリトライ
.subscribeNext {
...
}
retryWhen
hogeObservable
.retryWhen { _ in
// 30秒後にリトライ
return Observable.timer(30, ...)
}
.subscribeNext {
...
}
もうちょっと
Rx らしく
もうちょっと Rx らしく
→ Transforming / Filtering
→ Combining
→ Subject
Transforming
/ Filtering
Transforming / Filtering
→ Observable に対して map / flatMap / filter など
→ Array に対する map / flatMap / filter と同様
map
hogeObservable
.map { $0 * 10 }
flatMap
filter
Chaining Operators
hogeObservable
.filter { ... }
.map { ... }
.subscribeNext {
...
}
Combining
Combining
→ 複数のストリームをひとつのストリームにまとめ
る
merge
combineLatest
Subject
Subject
→ Observable の一種
→ 外部から Subject にデータを流せる
→ Hot Observable
データを流す
let subject = PublishSubject<String>()
subject.on(.Next("a"))
subject.on(.Next("b"))
subject.on(.Completed)
///////...
ストリームの分岐
→ ひとつのストリームから複数の Subscriber に
→ (Hot Observable)
おさらい
おさらい
→ Observable
→ Subscribe
→ Error Handling
→ Transforming / Filtering
→ Combining
→ Subject
Have a Happy
RxSwift Life!
Upcoming SlideShare
Loading in …5
×

RxSwift

2,913 views

Published on

http://kanmoba.connpass.com/event/25185/

Published in: Software
  • Be the first to comment

RxSwift

  1. 1. RxSwift USAMI Kosuke (Fenrir Inc.)
  2. 2. RxSwift ReactiveX for Swift → ReactiveX family : Rx.NET / RxJS / RxJava / ...
  3. 3. RxSwift Released! 2.0.0 : 2016/01/02 (Latest release = 2.1.0 : 2016/01/11)
  4. 4. 5分でわかる RxSwift
  5. 5. とりあえず使 ってみるため の知識
  6. 6. とりあえず使ってみるための知識 → Observable → Subscribe → Error Handling
  7. 7. Observable
  8. 8. Observable → 非同期データストリーム → UI からのアクション → OS からの Notification → URL セッションのレスポンス
  9. 9. Observable の要素 → Next → Completed → Error
  10. 10. Next → case .Next(let value) → value = ストリーム内のデータ
  11. 11. Completed → case .Completed → ストリームの終わり → 明示的な終わりがないストリームもある
  12. 12. Error → case .Error(let error) → error = ErrorType 型の値 → ストリームの終わりでもある
  13. 13. Observable の生成 → Observable.create などで生成 → RxCocoa が用意している rx_tap / rx_notification / rx_response / ...
  14. 14. Subscribe
  15. 15. Subscribe → ストリームからデータを受け取る → subscribeNext → subscribeCompleted → subscribeError
  16. 16. 例 : UIButton アクション hogeButton.rx_tap .subscribeNext { [unowned self] _ in self.hoge() }
  17. 17. 例 : NSNotification let center = NSNotificationCenter.defaultCenter() center.rx_notification(UIApplicationDidBecomeActiveNotification) .subscribeNext { [unowned self] _ in self.hoge() }
  18. 18. 例 : NSURLSession let session: NSURLSession = ... let request = NSURLRequest(...) session.rx_response(request) .subscribeNext { (data, response) in ... }
  19. 19. Error Handling
  20. 20. catchError hogeObservable .catchError { error in ... } .subscribeNext { ... }
  21. 21. retry hogeObservable .retry(3) // 3回までリトライ .subscribeNext { ... }
  22. 22. retryWhen hogeObservable .retryWhen { _ in // 30秒後にリトライ return Observable.timer(30, ...) } .subscribeNext { ... }
  23. 23. もうちょっと Rx らしく
  24. 24. もうちょっと Rx らしく → Transforming / Filtering → Combining → Subject
  25. 25. Transforming / Filtering
  26. 26. Transforming / Filtering → Observable に対して map / flatMap / filter など → Array に対する map / flatMap / filter と同様
  27. 27. map hogeObservable .map { $0 * 10 }
  28. 28. flatMap
  29. 29. filter
  30. 30. Chaining Operators hogeObservable .filter { ... } .map { ... } .subscribeNext { ... }
  31. 31. Combining
  32. 32. Combining → 複数のストリームをひとつのストリームにまとめ る
  33. 33. merge
  34. 34. combineLatest
  35. 35. Subject
  36. 36. Subject → Observable の一種 → 外部から Subject にデータを流せる → Hot Observable
  37. 37. データを流す let subject = PublishSubject<String>() subject.on(.Next("a")) subject.on(.Next("b")) subject.on(.Completed) ////////// subject.subscribeNext { ... }
  38. 38. ストリームの分岐 → ひとつのストリームから複数の Subscriber に → (Hot Observable)
  39. 39. おさらい
  40. 40. おさらい → Observable → Subscribe → Error Handling → Transforming / Filtering → Combining → Subject
  41. 41. Have a Happy RxSwift Life!

×