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 x Realm
宇佐見 公輔
2015/9/29 Realm meetup #7
自己紹介
• 宇佐見 公輔 (@usamik26)
• 大阪府堺市在住
• フェンリル株式会社
• アプリケーション共同開発部
• iOS アプリエンジニア
アドレスバーすら取り払った
究極の先端的ブラウザ
今日の内容
• RxSwift の紹介
• RxSwift と Realm との連携
RxSwift
Reactive Programming
• イベントや値の関係を記述
• 一方の変化を他方に伝播
• メッセージ送信の隠
• データバインディングは Reactive な仕組みの一種
Functional Reactive Programming
• 非同期データストリーム
• 時間軸に沿って値が流れるリスト
• ストリームに対するリスト操作
• map や filter といった関数型のイディオム
RP / FRP の利点
• イベント駆動処理が書きやすい
• 非同期処理が書きやすい
• したがって、GUI プログラミングと相性がよい
Reactive Programming for iOS
• ReactiveCocoa
• ReactKit
• RxSwift
• それぞれに良さがある
ReactiveX ファミリー
• Rx.NET (C#)
• RxJS
• RxJava
• RxSwift
• ・・・など
RxSwift 2.0
• Swift 2 対応版
• バージョン 2.0.0-alpha.3
• iOS 7 以降(iOS 8 以降が望ましい)
• 基本的なところは十分使える状態
• 実案件で採用中
RxSwift の実際
RxSwift / RxCocoa
• RxSwift
• Observable / 各種 Operator / Scheduler など
• RxCocoa
• UIKit / NSURLSession / KVO など
Observable
• 非同期データストリームをあらわす
例:イベント処理
button.rx_tap
.subscribeNext { _ in
// ボタンがタップされたときの処理
}
.addDisposableTo(disposeBag)
例:非同期処理
URLSession.rx_response(request)
.subscribeOn(sessionScheduler)
.map { (data, response) in
// バックグラウンド処理
}
.observe...
例:ストリームをつくる:NSURLResponseの場合
func rx_response(request: NSURLRequest) -> Observable<NSData!, NSURLResponse!> {
return creat...
例:ストリームをつくる:別の手段
let items = PublishSubject<Item>() // Observable<Item>
// データを流す
items.on(.Next(item))
// 終了
items.on(.Co...
例:作ったストリームを使う
items
.filter { _ in
// 不要なデータを捨てる
}
.subscribeNext { _ in
// データに対する処理
}
.addDisposableTo(disposeBag)
RxSwift x Realm
Realm のデータ取得
• Realm のクエリでもいいけど・・・
• Rx でデータを取得したい(Observable で扱いたい)
• DB アクセスと Rx の処理が混在すると厄介
• スレッドをまたぐ場合をどうする?
RxJava のケースを参考にする
モデルクラスを分ける
• ひとつの対象に対して、ふたつのモデルクラスをつくる
• Realm の Object 型のモデル
• 非 Realm のモデル
• 冗長であることは否定できない・・・
• DB 用のモデルと View 用のモデル、と思...
仲介役をつくる
• RealmDataService
• Realm のクエリから Results を得る
• Realm の Results から View 用のモデルに変換
• View 用のモデルの Observable を出力
Realm へのアクセス
• RealmObservable
• Realm へのアクセス処理を一箇所にまとめる
• (前述の RealmDataService で直接 Realm アクセス
することも可能だが、煩雑になる)
使い方
RealmDataService.items
.map { item in
// モデルの処理
}
.addDisposableTo(disposeBag)
Realm への書き込み
• 同様の枠組みで書き込みにも対応できる
• RealmDataService にデータ作成 I/F を追加
• RealmObservable をトランザクションに対応
まとめ
まとめ
• RxSwift の紹介
• RxSwift の実際
• RxSwift と Realm との連携
• 一工夫いれるとよい
• Rx と Realm をちゃんと分けて考えるのがよい
RxSwift x Realm
RxSwift x Realm
Upcoming SlideShare
Loading in …5
×

of

RxSwift x Realm Slide 1 RxSwift x Realm Slide 2 RxSwift x Realm Slide 3 RxSwift x Realm Slide 4 RxSwift x Realm Slide 5 RxSwift x Realm Slide 6 RxSwift x Realm Slide 7 RxSwift x Realm Slide 8 RxSwift x Realm Slide 9 RxSwift x Realm Slide 10 RxSwift x Realm Slide 11 RxSwift x Realm Slide 12 RxSwift x Realm Slide 13 RxSwift x Realm Slide 14 RxSwift x Realm Slide 15 RxSwift x Realm Slide 16 RxSwift x Realm Slide 17 RxSwift x Realm Slide 18 RxSwift x Realm Slide 19 RxSwift x Realm Slide 20 RxSwift x Realm Slide 21 RxSwift x Realm Slide 22 RxSwift x Realm Slide 23 RxSwift x Realm Slide 24 RxSwift x Realm Slide 25 RxSwift x Realm Slide 26 RxSwift x Realm Slide 27 RxSwift x Realm Slide 28 RxSwift x Realm Slide 29 RxSwift x Realm Slide 30
Upcoming SlideShare
クラスメソッド第4回登壇資料 RxRealm
Next
Download to read offline and view in fullscreen.

11 Likes

Share

Download to read offline

RxSwift x Realm

Download to read offline

Realm meetup #7
http://realm.connpass.com/event/19719/

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

RxSwift x Realm

  1. 1. RxSwift x Realm 宇佐見 公輔 2015/9/29 Realm meetup #7
  2. 2. 自己紹介 • 宇佐見 公輔 (@usamik26) • 大阪府堺市在住 • フェンリル株式会社 • アプリケーション共同開発部 • iOS アプリエンジニア アドレスバーすら取り払った 究極の先端的ブラウザ
  3. 3. 今日の内容 • RxSwift の紹介 • RxSwift と Realm との連携
  4. 4. RxSwift
  5. 5. Reactive Programming • イベントや値の関係を記述 • 一方の変化を他方に伝播 • メッセージ送信の隠 • データバインディングは Reactive な仕組みの一種
  6. 6. Functional Reactive Programming • 非同期データストリーム • 時間軸に沿って値が流れるリスト • ストリームに対するリスト操作 • map や filter といった関数型のイディオム
  7. 7. RP / FRP の利点 • イベント駆動処理が書きやすい • 非同期処理が書きやすい • したがって、GUI プログラミングと相性がよい
  8. 8. Reactive Programming for iOS • ReactiveCocoa • ReactKit • RxSwift • それぞれに良さがある
  9. 9. ReactiveX ファミリー • Rx.NET (C#) • RxJS • RxJava • RxSwift • ・・・など
  10. 10. RxSwift 2.0 • Swift 2 対応版 • バージョン 2.0.0-alpha.3 • iOS 7 以降(iOS 8 以降が望ましい) • 基本的なところは十分使える状態 • 実案件で採用中
  11. 11. RxSwift の実際
  12. 12. RxSwift / RxCocoa • RxSwift • Observable / 各種 Operator / Scheduler など • RxCocoa • UIKit / NSURLSession / KVO など
  13. 13. Observable • 非同期データストリームをあらわす
  14. 14. 例:イベント処理 button.rx_tap .subscribeNext { _ in // ボタンがタップされたときの処理 } .addDisposableTo(disposeBag)
  15. 15. 例:非同期処理 URLSession.rx_response(request) .subscribeOn(sessionScheduler) .map { (data, response) in // バックグラウンド処理 } .observeOn(mainScheduler) .map { data in // UI処理 }
  16. 16. 例:ストリームをつくる:NSURLResponseの場合 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 { /* キャンセル処理 */ } } }
  17. 17. 例:ストリームをつくる:別の手段 let items = PublishSubject<Item>() // Observable<Item> // データを流す items.on(.Next(item)) // 終了 items.on(.Completed) // エラー終了 items.on(.Error(error))
  18. 18. 例:作ったストリームを使う items .filter { _ in // 不要なデータを捨てる } .subscribeNext { _ in // データに対する処理 } .addDisposableTo(disposeBag)
  19. 19. RxSwift x Realm
  20. 20. Realm のデータ取得 • Realm のクエリでもいいけど・・・ • Rx でデータを取得したい(Observable で扱いたい) • DB アクセスと Rx の処理が混在すると厄介 • スレッドをまたぐ場合をどうする?
  21. 21. RxJava のケースを参考にする
  22. 22. モデルクラスを分ける • ひとつの対象に対して、ふたつのモデルクラスをつくる • Realm の Object 型のモデル • 非 Realm のモデル • 冗長であることは否定できない・・・ • DB 用のモデルと View 用のモデル、と思えば許容範囲
  23. 23. 仲介役をつくる • RealmDataService • Realm のクエリから Results を得る • Realm の Results から View 用のモデルに変換 • View 用のモデルの Observable を出力
  24. 24. Realm へのアクセス • RealmObservable • Realm へのアクセス処理を一箇所にまとめる • (前述の RealmDataService で直接 Realm アクセス することも可能だが、煩雑になる)
  25. 25. 使い方 RealmDataService.items .map { item in // モデルの処理 } .addDisposableTo(disposeBag)
  26. 26. Realm への書き込み • 同様の枠組みで書き込みにも対応できる • RealmDataService にデータ作成 I/F を追加 • RealmObservable をトランザクションに対応
  27. 27. まとめ
  28. 28. まとめ • RxSwift の紹介 • RxSwift の実際 • RxSwift と Realm との連携 • 一工夫いれるとよい • Rx と Realm をちゃんと分けて考えるのがよい
  • kskotetsu

    Dec. 20, 2016
  • satoshinakagawa543

    Apr. 11, 2016
  • tamashin

    Apr. 10, 2016
  • hellokenta1024

    Apr. 6, 2016
  • ymizush

    Mar. 29, 2016
  • sat0shitakan0

    Mar. 11, 2016
  • ryomakawajiri

    Jan. 27, 2016
  • HitoshiKamezaki

    Dec. 6, 2015
  • tkmrsntr

    Dec. 6, 2015
  • liushuililuo

    Nov. 15, 2015
  • keygx

    Sep. 30, 2015

Realm meetup #7 http://realm.connpass.com/event/19719/

Views

Total views

5,956

On Slideshare

0

From embeds

0

Number of embeds

2,852

Actions

Downloads

9

Shares

0

Comments

0

Likes

11

×