Slide 1

Slide 1 text

yohei SUGIGAMI Realm Centered Design RxSwift+RxRealm(RealmNotification) Aug. 23, 2016 @ Wantedly potatotips #32 Realmத৺ઃܭ

Slide 2

Slide 2 text

γΰτͰίίϩΦυϧ ਿ্ ༸ฏ Yohei SUGIGAMI ID susieyy TwitterˍQiitaˍGithub

Slide 3

Slide 3 text

γΰτͰίίϩΦυϧ Launch iPhone3G iOS Developer since mid 2008 realm notificationΛ஌ͬͯ·͔͢ʁ

Slide 4

Slide 4 text

γΰτͰίίϩΦυϧ Launch iPhone3G iOS Developer since mid 2008 addNotificationBlockϝιουͰϒϩοΫΛ ొ࿥͢ΔͱΦϒδΣΫτ͕ߋ৽͞Εͨͱ͖ ௨஌Λड͚Δ͜ͱ͕ͰΔ ʢਆػೳʣ

Slide 5

Slide 5 text

γΰτͰίίϩΦυϧ Launch iPhone3G iOS Developer since mid 2008 Aը໘ Bը໘ WriteTx Notification Aը໘ͰͷมߋΛBը໘ʹ௨஌Ͱ͖Δ

Slide 6

Slide 6 text

γΰτͰίίϩΦυϧ Launch iPhone3G iOS Developer since mid 2008 Code example ͱ͘ʹ഑ྻσʔλͷ؂ࢹͷ ࠩ෼Index௨஌͕͢͹Β͍͠ʂ

Slide 7

Slide 7 text

γΰτͰίίϩΦυϧ Launch iPhone3G iOS Developer since mid 2008 RxSwift RxRealm x meets

Slide 8

Slide 8 text

γΰτͰίίϩΦυϧ Launch iPhone3G iOS Developer since mid 2008 try! Realm().objects(ContactRealm).asObservableChangeset() .subscribeNext { [weak self] results, changeset in guard let tableView = self?.tableView else { return } self?.results = results if let changeset = changeset { tableView.beginUpdates() tableView.insertRowsAtIndexPaths(…, withRowAnimation: .Automatic) tableView.deleteRowsAtIndexPaths(…, withRowAnimation: .Automatic) tableView.reloadRowsAtIndexPaths(…, withRowAnimation: .Automatic) tableView.endUpdates() } else { tableView.reloadData() } }.addDisposableTo(disposeBag) NotificationΛRxSwiftͷObservableͱͯ͠ѻ͑Δʂ

Slide 9

Slide 9 text

γΰτͰίίϩΦυϧ Launch iPhone3G iOS Developer since mid 2008 // Simple Create [MessageRealm("hello"), MessageRealm("world")] .toObservable() .subscribe(Realm.rx_add()) // With API let request = API.Endpoint.MessagesRequest().request() Session.rx_response(request) .subscribe(Realm.rx_add()) RealmObjectͷCRUD΋RwSwiftͷ؅ཧԼʹʂ

Slide 10

Slide 10 text

γΰτͰίίϩΦυϧ B Launch iPhone3G iOS Developer since mid 2008 RxSwift MVVM Realm Centered Design RxRealm

Slide 11

Slide 11 text

γΰτͰίίϩΦυϧ Launch iPhone3G iOS Developer since mid 2008 View ViewModel Aը໘ Bը໘ Cը໘ Subscribe ௨৴தͳͲը໘ݻ༗ͷঢ়ଶ RxSwift w/ MVVM ը໘ͷओཁͳσʔλ ը໘ԣஅతͳσʔλͷѻ͍͕೉͍͠ ʢLike໰୊ʣ

Slide 12

Slide 12 text

γΰτͰίίϩΦυϧ Launch iPhone3G iOS Developer since mid 2008 View ViewModel Aը໘ Bը໘ Cը໘ Subscribe ը໘ԣஅతͳঢ়ଶɾσʔλ ௨৴தͳͲը໘ݻ༗ͷঢ়ଶ earth (Singleton) ஍ٿ͸Ͱ͔͍ͬγϯάϧτϯ RxSwift w/ MVVM(earth) ը໘ͷओཁͳσʔλ Global ViewModel ©

Slide 13

Slide 13 text

γΰτͰίίϩΦυϧ Launch iPhone3G iOS Developer since mid 2008 View ViewModel Aը໘ Bը໘ Cը໘ Observable Store Subscribe ը໘ԣஅͳঢ়ଶ ը໘ͷओཁͳσʔλ ௨৴தͳͲը໘ݻ༗ͷঢ়ଶ earth (Singleton) ஍ٿ͸Ͱ͔͍ͬγϯάϧτϯ RxSwift+RxRealm w/ MVVM (RxRealm)

Slide 14

Slide 14 text

γΰτͰίίϩΦυϧ Launch iPhone3G iOS Developer since mid 2008 Redux - Single source of truth - State is read-only - Changes are made with pure functions ΞϓϦͷঢ়ଶɾσʔλΛอ࣋͢ΔStore͸ͨͩ1ͭ Inspired by

Slide 15

Slide 15 text

γΰτͰίίϩΦυϧ Launch iPhone3G iOS Developer since mid 2008 ΫϥΠΞϯτΞϓϦ͸ঢ়ଶɾσʔλ؅ཧ͸ෳࡶ - ෭࣍తͳ࢈෺ͱͯ͠ɺRxDatasourceʹΑΔTableViewBinding͸࢖͍ʹ ͍͘ͷͰRealmNotificationʹΑΔTableViewReload͸ѻ͍΍͍͢ 㱺 Rx w/ MVVMͱReduxͷ͍͍ͱ͜ΖͲΓΛ͍ͨ͠ - ը໘ʹඥͮ͘σʔλͱঢ়ଶΛViewModelʹ٧ΊΔͷ΋ɺΞϓϦશମͷσʔλͱ ঢ়ଶΛStoreʹ٧ΊΔͷ΋྆ۃ୺Ͱਏ͍ - “஍ٿ͸Ͱ͔͍ͬγϯάϧτϯ”͸ΤϙοΫϝΠΩϯά - ը໘ʹඥͮ͘ঢ়ଶΛ֤ViewModelʹσʔλΛStoreʢRealm or Singletonʣ ʹͱ͍͏ં஭ҊΛߟ͑ͨ ·ͱΊ

Slide 16

Slide 16 text

5IBOLZPV