Reactive Programming is essentially about
modeling asynchronous sequences
What is Reactive Programming?
Slide 13
Slide 13 text
Reactive Programming is essentially about
modeling asynchronous sequences
Slide 14
Slide 14 text
What is Reactive Programming?
Reactive Programming is essentially about
modeling asynchronous sequences
So what is RxSwift?
RxSwift implements patterns, types, and
operators to create and work with
Observable sequences
Slide 15
Slide 15 text
REACTIVE EXTENSIONS
N
ov. ‘09
Rx.N
ET
RxJS
M
ar. ‘10
RxJava
M
ar. ‘12
RxC
pp
N
ov. ‘12
RxRuby
D
ec. ‘12
RxScala, RxC
lojure, RxG
roovy, RxJRuby
Jan. ‘13
RxPY, RxPH
P
M
ar. ‘13
RxKotlin
O
ct. ‘13
RxSw
ift
Feb. ‘15
Slide 16
Slide 16 text
No content
Slide 17
Slide 17 text
ABOUT RX
▸ Event-driven
▸ Asynchronous
▸ Functional
▸ Common patterns
▸ Observer
▸ Iterator
▸ Cross-platform
Slide 18
Slide 18 text
LIFECYCLE OF AN OBSERVABLE SEQUENCE
▸ Next
1 2 3
Slide 19
Slide 19 text
LIFECYCLE OF AN OBSERVABLE SEQUENCE
▸ Next
tap tap tap
Slide 20
Slide 20 text
LIFECYCLE OF AN OBSERVABLE SEQUENCE
▸ Next
▸ Error
1 2 3
Slide 21
Slide 21 text
LIFECYCLE OF AN OBSERVABLE SEQUENCE
▸ Next
▸ Error
▸ Completed
1 2 3
Slide 22
Slide 22 text
LIFECYCLE OF AN OBSERVABLE SEQUENCE
▸ Next
▸ Error
▸ Completed
▸ dispose() / DisposeBag
1 2 3
TRANSFORMING
--- Example of: flatMap ---
Scott
Lori
Eric
exampleOf("flatMap") {
let disposeBag = DisposeBag()
}
struct Person {
var name: Variable
}
let scott = Person(name: Variable("Scott"))
let lori = Person(name: Variable("Lori"))
let person = Variable(scott)
person.asObservable()
.flatMap {
$0.name.asObservable()
}
.subscribeNext {
print($0)
}
.addDisposableTo(disposeBag)
person.value = lori
scott.name.value = "Eric"
Slide 38
Slide 38 text
TRANSFORMING
--- Example of: flatMapLatest ---
Scott
Lori
exampleOf("flatMapLatest") {
let disposeBag = DisposeBag()
struct Person {
var name: Variable
}
let scott = Person(name: Variable("Scott"))
let lori = Person(name: Variable("Lori"))
let person = Variable(scott)
person.asObservable()
.flatMapLatest {
$0.name.asObservable()
}
.subscribeNext {
print($0)
}
.addDisposableTo(disposeBag)
person.value = lori
scott.name.value = "Eric"
}
Slide 39
Slide 39 text
TRANSFORMING
exampleOf("flatMapLatest") {
let disposeBag = DisposeBag()
struct Person {
var name: Variable
}
let scott = Person(name: Variable("Scott"))
let lori = Person(name: Variable("Lori"))
let person = Variable(scott)
person.asObservable()
.debug("person")
.flatMapLatest {
$0.name.asObservable()
}
.subscribeNext {
print($0)
}
.addDisposableTo(disposeBag)
person.value = lori
scott.name.value = "Eric"
}
--- Example of: flatMapLatest ---
2016-05-28 07:31:22.555: person -> subscribed
2016-05-28 07:31:22.556: person -> Event Next((Person #1)(nam...able))
Scott
2016-05-28 07:31:22.557: person -> Event Next((Person #1)(nam...able))
Lori
2016-05-28 07:31:22.560: person -> Event Completed
2016-05-28 07:31:22.560: person -> disposed
Slide 40
Slide 40 text
RXSWIFT OPERATORS
▸ Creating
asObservable
create
deferred
empty
error
toObservable
interval
never
just
of
range
repeatElement
timer
▸ Transforming
buffer
flatMap
flatMapFirst
flatMapLatest
map
scan
window
▸ Filtering
debounce / throttle
distinctUntilChanged
elementAt
filter
sample
skip
take
takeLast
single
▸ Conditional & Boolean
amb
skipWhile
skipUntil
takeUntil
takeWhile
▸ Mathematical &
Aggregate
concat
reduce
toArray
▸ Connectable
multicast
publish
refCount
replay
shareReplay
▸ Combining
merge
startWith
switchLatest
combineLatest
zip
▸ Error Handling
catch
retry
retryWhen
▸ Observing
delaySubscription
do / doOnNext
observeOn
subscribe
subscribeOn
timeout
using
debug