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?
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