SWIFT REACTIVE PROGRAMMING
COCOAHEADS MONTPELLIER 2017
POURQUOI ?
POURQUOI ?
21.04.17 BACKELITE 3
• selector:
• NSNotificationCenter
• Delegate
• Blocks / Closure
• Grand Central Dispatch
• Etc...
CAS 1 : OBSERVABLE<ARRAY> + UITABLEVIEW
CAS 1
0 first
1 second
21.04.17 BACKELITE 5
2 third
CAS 1
21.04.17 BACKELITE 6
0 first 0 first
1 second
0 first
1 second
2 third
LIVE CODING / DEMO
https://github.com/davidy4ng/Cocoaheads_RxDemo
21.04.17 BACKELITE 7
CAS 2 : UISEARCHBAR + URL REQUEST + UITABLEVIEW
CAS 2
21.04.17 BACKELITE 9
orEmpty
debounce (0.5s)
map
flatMapLatest
map
bindTo
Observable<String>
Observable<String>
Observable<URLRequest>
Observable<Data>
Observable<[GithubRepo]>
LIVE CODING / DEMO
https://github.com/davidy4ng/Cocoaheads_RxDemo
21.04.17 BACKELITE 10
CAS 3 : MVVM
CAS 3 : MVVM
21.04.17 BACKELITE 12
ModelViewModelView
(ViewController)
owns owns
updates updates
Une autre fois…
21.04.17 BACKELITE 13
LIENS UTILES
21.04.17 BACKELITE 14
• https://github.com/ReactiveX/RxSwift
• http://rx-marin.com/
• http://www.thedotpost.com/2017/01/marin-todorov-rxswift-on-ios
• https://store.raywenderlich.com/products/rxswift
david.yang@backelite.com
www.backelite.com
CONTACTEZ-NOUS
YANG David
iOS Developer / Tech Lead
21.04.17 BACKELITE 15

RX Swift avril 2017 - David Yang

Editor's Notes

  • #4 Dans une application iOS, on fait de l’asynchrone pour plein de choses… Des design-pattern différents pour au final faire de l’asynchrone. Intérêt de la programmation réactive ? Permettre de combiner facilement toutes ces notions sous une forme plus uniforme.
  • #6 On veut pouvoir observer un tableau qui va servir à alimenter une UITableView
  • #7 Schématisation
  • #8 Voir la classe TimeViewController
  • #10 Depuis le UISearchBar, on observe le contenu texte, puis on y fait plusieurs traitement : orEmpty : transforme le texte récupéré de String? à String debounce : ignore les élements de la séquence sur une durée de 0.5s map : on transforme notre String en URLRequest flatMapLatest : transforme les éléments de la séquence précédente en une nouvelle séquence d’éléments puis retourne la séquence la plus récente map : on transforme la donnée de la séquence précédente en une liste d’objets « GithubRepo » bindTo : on bind tout ça sur la tableView
  • #11 Voir la classe GithubViewController
  • #13 MVVM : schéma