In this iteration of iOS Meetup, The experts from Seven Peaks Software will walk you through on the Swift programming language, Giving you the latest tips and tricks for you to be success on the iOS development
Saravudh dived deep into RXSwift: Subjects & Operators. RxSwift is a famous library for composing asynchronous and event-based programs by using observable sequences. Subject and Operation are fundamentals of RxSwift. His topic will lead to a better understanding of the mechanism and behavior of subjects and the main combination operators in RxSwift. It is beneficial to begin by learning the fundamentals.
2. What is RxSwift
Subjects
○ PublishSubjects
○ BehaviorSubjects
○ ReplaySubjects
○ AsyncSubjects
Combining Operators
○ CombineLatest
○ Merge
○ Zip
Agenda
3. What is RxSwift
RxSwift, simplifies
developing asynchronous
programs by allowing
your code to react to new
data and process it in
sequential, isolated
manner.
raywenderlich.com
Observer 1
Observer 2
Observer 3
Observable<Int>
2, 3, 5, 7, 11, 13, 17 |
2, 3, 5, 7, 11, 13, 17 |
2, 3, 5, 7, 11, 13, 17 |
Operator
6. Coding
subject.onNext("Green")
let subscriptionTwo = subject
.subscribe(onNext: { item in
print("subscriptionTwo: (item)")
})
subscriptionTwo.disposed(by: disposeBag)
subject.onNext("Blue")
subject.onNext("Red")
subscriptionOne: Red
subscriptionOne: Green
subscriptionOne: Blue
subscriptionTwo: Blue
PublishSubjects
let subscriptionOne = subject
.subscribe(onNext: { item in
print("subscriptionOne: (item)")
})
subscriptionOne.disposed(by: disposeBag)
let subject = PublishSubject<String>()
8. Coding
let subject = BehaviorSubject<String>(value: "Purple")
subject.onNext("Red")
subject.onNext(“Green")
subject.onNext("Blue")
let subscriptionTwo = subject
.subscribe(onNext: { item in
print("subscriptionTwo: (item)")
})
subscriptionTwo.disposed(by: disposeBag)
subscriptionOne: Purple
subscriptionOne: Red
subscriptionOne: Green
subscriptionTwo: Green
subscriptionOne: Blue
subscriptionTwo: Blue
BehaviorSubjects
let subscriptionOne = subject
.subscribe(onNext: { item in
print("subscriptionOne: (item)n")
})
subscriptionOne.disposed(by: disposeBag)
10. Coding
let subject = ReplaySubject<String>.create(bufferSize: 3)
subject.onNext("Red")
subject.onNext("Green")
let subscriptionTwo = subject
.subscribe(onNext: { item in
print("subscriptionTwo: (item)n")
})
subscriptionTwo.disposed(by: disposeBag)
subject.onNext("Blue")
subscriptionOne: Red
subscriptionOne: Green
subscriptionTwo: Red
subscriptionTwo: Green
subscriptionOne: Blue
subscriptionTwo: Blue
ReplaySubjects
let subscriptionOne = subject
.subscribe(onNext: { item in
print("subscriptionOne: (item)n")
})
subscriptionOne.disposed(by: disposeBag)
17. Coding
let input1 = PublishSubject<String>()
let input2 = PublishSubject<String>()
let output = Observable.combineLatest(input1, input2, resultSelector: {
lastTop, lastBottom in
"((lastTop)(lastBottom))"
})
output.subscribe(onNext: { item in
print("combineLatest: (item)n")
}).disposed(by: disposeBag)
input1.onNext("1")
input2.onNext("A")
input1.onNext("2")
input2.onNext("B")
input2.onNext("C")
input2.onNext("D")
input1.onNext("3")
input1.onNext("4")
(1A)
(2A)
(2B)
(2C)
(2D)
(3D)
(4D)
CombineLatest
18. Zip
combine the emissions
of multiple Observables
together via a specified
function and emit single
items for each
combination based on
the results of this
function
https://reactivex.io
19. Coding
let input1 = PublishSubject<String>()
let input2 = PublishSubject<String>()
let output = Observable.zip(input1.asObservable(), input2.asObservable())
output.subscribe(onNext: { item1, item2 in
print("(item1)(item2)n")
}).disposed(by: disposeBag)
input1.onNext("1")
input2.onNext("A")
input1.onNext("2")
input2.onNext("B")
input2.onNext("C")
input2.onNext("D")
input1.onNext("3")
input1.onNext("4")
input1.onCompleted()
input2.onNext("E")
1A
2B
3C
4D
Zip