Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Developer Experience at Heetch

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Developer Experience at Heetch

Avatar for Jérôme Alves

Jérôme Alves

April 04, 2019

More Decks by Jérôme Alves

Other Decks in Technology

Transcript

  1. MVC

  2. → Managing the View → Presenting View Controllers → Supporting

    Custom Transitions and Presentations → Managing Child View Controllers in a Custom Container
  3. → Responding to View Events → Extending the View's Safe

    Area → Managing the View's Margins → Configuring the View’s Layout Behavior → Managing the Status Bar
  4. → Configuring Visual Appearance → Managing the View Hierarchy →

    Managing AutoLayout (Constraints, LayoutGuides, etc..) → Laying out Subviews (manually) → Drawing → Managing Gesture Recognizers
  5. class ProfileViewModel { var name: Observable<String> { get } var

    email: Observable<String?> { get } var rating: Observable<Double> { get } }
  6. extension ProfileViewModel { func drive(_ view: ProfileHeaderView) { /* Binding

    Rx */ } func drive(_ view: ProfileContentView) { /* Binding Rx */ } func drive(_ view: ProfileSummaryView) { /* Binding Rx */ } }
  7. protocol ProfileViewModelIO { var profile: Observable<Profile> { get } func

    updateEmail(_ newValue: String) -> Completable } class ProfileViewModel { let io: ProfileViewModelIO init(io: ProfileViewModelIO) { self.io = io } }
  8. let viewModel = ProfileViewModel(io: .resolve( profile: { Observable.merge( apns.continuousUpdates(of: .profile),

    api.performRequest(.getProfile) ) }, updateEmail: { newValue in api.performRequest(.postEmail(newValue)) } ))