iOSCon

  • View
    136

  • Download
    1

  • Category

    Mobile

Preview:

Citation preview

Introduction to Functional Reactive

Programming

EliaszSawicki.com ( @EliSawic )

Functional Reactive Programming

EliaszSawicki.com ( @EliSawic )

Streams

EliaszSawicki.com ( @EliSawic )

Stream

EliaszSawicki.com ( @EliSawic )

Arrayslet values = [1, 2, 3, 4]let doubledValues = values.map { $0 * 2 }let higherThanTwo = values.filter { $0 > 2 }let sum = values.reduce(0, +)

EliaszSawicki.com ( @EliSawic )

Filter

EliaszSawicki.com ( @EliSawic )

Combine Latest

EliaszSawicki.com ( @EliSawic )

Chaining manipulations let names = nameField.reactive.text

EliaszSawicki.com ( @EliSawic )

Chaining manipulations names.filter { $0.characters.count >= 3}

EliaszSawicki.com ( @EliSawic )

Chaining manipulations names.filter { $0.characters.count >= 3} .map { return "Dear" + $0 }

EliaszSawicki.com ( @EliSawic )

Chaining manipulations let prefixedNames = names.filter { $0.characters.count >= 3} .map { return "Dear" + $0 }

let combined = combineLatest(prefixedNames, surnames)

combined.observeValues { prefixedNames, surname in print("Form input is \(prefixedNames) \(surname)") }

EliaszSawicki.com ( @EliSawic )

www.rxmarbles.com

EliaszSawicki.com ( @EliSawic )

ReactiveSwift

EliaszSawicki.com ( @EliSawic )

Events flow

EliaszSawicki.com ( @EliSawic )

Non-Terminating• Next

EliaszSawicki.com ( @EliSawic )

Terminating

• Completed

• Failed

• Interrupted (Reactive Cocoa)

EliaszSawicki.com ( @EliSawic )

This screen is a signal

EliaszSawicki.com ( @EliSawic )

Represents events over time

EliaszSawicki.com ( @EliSawic )

Observe

EliaszSawicki.com ( @EliSawic )

EliaszSawicki.com ( @EliSawic )

If you don't observe, it's gone

EliaszSawicki.com ( @EliSawic )

Observingpresentation.observeValues { idea in remember(idea: idea)}

presentation.observeCompleted { print("Time for a break")}

EliaszSawicki.com ( @EliSawic )

Signal producer

EliaszSawicki.com ( @EliSawic )

Represents a tasks

EliaszSawicki.com ( @EliSawic )

Does not start it's work if not asked

EliaszSawicki.com ( @EliSawic )

Producingpresenter.startWithSignal { (signal, _) in signal.observeValues { idea in print(idea) }

signal.observeCompleted { print("Time for a break") }}

EliaszSawicki.com ( @EliSawic )

Hot vs Cold

EliaszSawicki.com ( @EliSawic )

Signal SignalProducer

presentation.observeValues presentation.startWithValues

EliaszSawicki.com ( @EliSawic )

Signal SignalProducer

presentation.observeValues presentation.startWithValues

emits values all the time waits for your request

EliaszSawicki.com ( @EliSawic )

Properties

EliaszSawicki.com ( @EliSawic )

Bindings

EliaszSawicki.com ( @EliSawic )

Binding examplelet (slides, _) = Signal<Slide, NoError>.pipe()

label.reactive.text <~ slides.map { return "Slide: \($0.number)" }

EliaszSawicki.com ( @EliSawic )

Memory Management

EliaszSawicki.com ( @EliSawic )

Disposables

EliaszSawicki.com ( @EliSawic )

Free your memorylet disposable = signal.observeValues { value in ...}

deinit { disposable.dispose()}

EliaszSawicki.com ( @EliSawic )

FUNctional reactive programming

EliaszSawicki.com ( @EliSawic )