Slide 1

Slide 1 text

FRP MY SWIFT!

Slide 2

Slide 2 text

About me Afonso Graça ! @ Unbabel Building mobile apps (and some web too) Livetweeting " @AfonsoGraca

Slide 3

Slide 3 text

How did you get to ?

Slide 4

Slide 4 text

Option 1 Go along R. Alves Redol, Av. de António José de Almeida and Av. Defensores de Chaves Then take Av. de Berna, Av. Calouste Gulbenkian and Av. Ceuta to R. Fradesso da Silveira Finally turn to R. Rodrigues de Faria …Aaaand drop me at no. 103. How did you get to ?

Slide 5

Slide 5 text

Option 2 Take me to Lx Factory please! Option 1 Go along R. Alves Redol, Av. de António José de Almeida and Av. Defensores de Chaves Then take Av. de Berna, Av. Calouste Gulbenkian and Av. Ceuta to R. Fradesso da Silveira Finally turn to R. Rodrigues de Faria …Aaaand drop me at no. 103. How did you get to ?

Slide 6

Slide 6 text

Option 2 Take me to Lx Factory please! Option 1 Go along R. Alves Redol, Av. de António José de Almeida and Av. Defensores de Chaves Then take Av. de Berna, Av. Calouste Gulbenkian and Av. Ceuta to R. Fradesso da Silveira Finally turn to R. Rodrigues de Faria …Aaaand drop me at no. 103. How did you get to ? Imperative Declarative

Slide 7

Slide 7 text

Imperative vs. Declarative How you are going to achieve Keep state and mutate it What you are want to achieve Context-Independent Simpler, more readable

Slide 8

Slide 8 text

Should I start to code only in a declarative way?

Slide 9

Slide 9 text

Should I start to code only in a declarative way? Probably not.

Slide 10

Slide 10 text

We should strive to achieve
 a nice balance
 between both in our codebases

Slide 11

Slide 11 text

We should strive to achieve
 a nice balance
 between both in our codebases How? Functional Reactive Programming
 (from now on known as FRP)

Slide 12

Slide 12 text

FRP ‣Sequences ‣Transformations ‣Bindings

Slide 13

Slide 13 text

Sequences

Slide 14

Slide 14 text

Transformations

Slide 15

Slide 15 text

Bindings

Slide 16

Slide 16 text

RxSwift Sequences ▸ Observables Transformations ▸ map, filter, reduce… Bindings ▸ Bind and Subscribe And never forget the DisposeBag

Slide 17

Slide 17 text

How did it help me? Demo time

Slide 18

Slide 18 text

It’s Magic! Same functionality
 70% less code Optimized version 60% less code Overall better Readability

Slide 19

Slide 19 text

Want to go deeper? ‣ github.com/afonsograca/pixels_camp_frp_my_swift ‣ github.com/ReactiveX/RxSwift/ ‣ rxmarbles.com ‣ reactivex.io ‣ github.com/artsy/eidolon/

Slide 20

Slide 20 text

Afonso Graça " @AfonsoGraca # afonsograca.com $ afonsograca Thank You!