Slide 1

Slide 1 text

Teddy Ku January 27, 2017 ReactiveSwift

Slide 2

Slide 2 text

What is • 2012: built for Github desktop app • Streams of values over time • Why? • ReactiveX: RxJava, Rx.NET • Reduce state, reduce bugs ReactiveCocoa

Slide 3

Slide 3 text

• 2016: ReactiveCocoa split -> ReactiveSwift and ReactiveCocoa • Pure Swift rewrite • Type safety • Performance: didSet instead of What isReactiveSwift?

Slide 4

Slide 4 text

• UITextFieldDelegate? • UITextFieldTextDidChange notification? • textField.addTarget(self, action: #selector(textFieldDidChange),

Slide 5

Slide 5 text

Too much state

Slide 6

Slide 6 text

Signals = Events over time

Slide 7

Slide 7 text

Less state, less bugs

Slide 8

Slide 8 text

Signals

Slide 9

Slide 9 text

EMAIL PASSWORD PASSWORD BUTTON ENABLED bind Signals

Slide 10

Slide 10 text

T EMAIL PASSWORD PASSWORD BUTTON ENABLED [email protected] bind Signals

Slide 11

Slide 11 text

T T EMAIL PASSWORD PASSWORD BUTTON ENABLED [email protected] bind *************** Signals

Slide 12

Slide 12 text

T T T TTT EMAIL PASSWORD PASSWORD BUTTON ENABLED [email protected] bind *************** *************** Signals

Slide 13

Slide 13 text

T T T TTT EMAIL PASSWORD PASSWORD BUTTON ENABLED F TTF [email protected] bind *************** *************** Signals

Slide 14

Slide 14 text

T TTF T T TTT EMAIL PASSWORD PASSWORD BUTTON ENABLED F TTF T [email protected] bind *************** *************** Signals

Slide 15

Slide 15 text

T TTF T T TTT EMAIL PASSWORD PASSWORD BUTTON ENABLED F TTF T T TTT [email protected] bind *************** *************** Signals

Slide 16

Slide 16 text

T TTF T T TTT EMAIL PASSWORD PASSWORD BUTTON ENABLED F TTF T T TTT Translate to ReactiveSwift 1. Take latest string values 2. Check if each is not empty 3. Combine latest booleans 4. Return true if all not empty

Slide 17

Slide 17 text

T TTF T T TTT EMAIL PASSWORD PASSWORD BUTTON ENABLED F TTF T T TTT |> is equivalent to Translate to ReactiveSwift 1. Take latest string values 2. Check if each is not empty 3. Combine latest booleans 4. Return true if all not empty

Slide 18

Slide 18 text

Behavior is defined linearly and concisely

Slide 19

Slide 19 text

Live demo

Slide 20

Slide 20 text

1. Take latest string values 2. Validate email and password 3. Validate passwords match 4. Combine all validation results 5. BUT: don’t show errors if all fields aren’t filled out yet Error Validation

Slide 21

Slide 21 text

Live demo

Slide 22

Slide 22 text

RxMarbles T TTF T T TTT EMAIL PASSWORD PASSWORD BUTTON ENABLED F TTF T T TTT HTTP://RXMARBLES.COM/#COMBINELATEST

Slide 23

Slide 23 text

Recap • Less state, less bugs • Define behavior linearly & concisely • Types: Signal, Event https://github.com/tkuichooseyou/ReactiveSwiftTalk

Slide 24

Slide 24 text

Bonus • Signals representing other async events • Network Requests • Loading from disk • Sockets - real time updates • Throttle • Retry • Cancel network requests