Slide 1

Slide 1 text

@gregheo So You Want To Be A Reactive Programming Beginner?

Slide 2

Slide 2 text

@gregheo Data flows Propagation of change

Slide 3

Slide 3 text

@gregheo

Slide 4

Slide 4 text

@gregheo Slider 1 Slider 2 action method action method Text label Triangle

Slide 5

Slide 5 text

@gregheo Subscription Observable Slider 1 Text label 60° Subscription Draw triangle 58° 59° 62° 68° …

Slide 6

Slide 6 text

@gregheo Create Combine Listen Streams }

Slide 7

Slide 7 text

@gregheo Observable Slider 1 Observable Slider 2 Observable merge()

Slide 8

Slide 8 text

@gregheo Observable map bind map bind subscribe

Slide 9

Slide 9 text

@gregheo let angleSliderObservable = angleSlider.rx.value .map({ (angle: Float) in return RightTriangle(angle: Int(angle)) }) let oppositeAngleSliderObservable = oppositeAngleSlider.rx.value .map({ (angle: Float) in return RightTriangle(oppositeAngle: Int(angle)) }) let combinedObservable = Observable.of(angleSliderObservable, oppositeAngleSliderObservable).merge()

Slide 10

Slide 10 text

@gregheo let angleSliderObservable = angleSlider.rx.value .map({ (angle: Float) in return RightTriangle(angle: Int(angle)) }) let oppositeAngleSliderObservable = oppositeAngleSlider.rx.value .map({ (angle: Float) in return RightTriangle(oppositeAngle: Int(angle)) }) let combinedObservable = Observable.of(angleSliderObservable, oppositeAngleSliderObservable).merge() combinedObservable .subscribe(onNext: { (triangle: RightTriangle) in self.angleSlider.value = Float(triangle.angle) self.triangleView.triangle = triangle }) .addDisposableTo(disposeBag) combinedObservable .map({ "Angle: \($0.angle)°\nOpposite angle: \($0.oppositeAngle)°" }) .bindTo(label.rx.text) .addDisposableTo(disposeBag)

Slide 11

Slide 11 text

@gregheo let angleSliderObservable = angleSlider.rx.value .map({ (angle: Float) in return RightTriangle(angle: Int(angle)) }) let oppositeAngleSliderObservable = oppositeAngleSlider.rx.value .map({ (angle: Float) in return RightTriangle(oppositeAngle: Int(angle)) }) let combinedObservable = Observable.of(angleSliderObservable, oppositeAngleSliderObservable).merge() combinedObservable .subscribe(onNext: { (triangle: RightTriangle) in self.angleSlider.value = Float(triangle.angle) self.triangleView.triangle = triangle }) .addDisposableTo(disposeBag) combinedObservable .map({ "Angle: \($0.angle)°\nOpposite angle: \($0.oppositeAngle)°" }) .bindTo(label.rx.text) .addDisposableTo(disposeBag) Reactive Extensions input output

Slide 12

Slide 12 text

@gregheo Separation of Concerns

Slide 13

Slide 13 text

@gregheo Declarative

Slide 14

Slide 14 text

@gregheo Small Pieces of Logic

Slide 15

Slide 15 text

feedback @gregheo