Slide 1

Slide 1 text

RxSwift Basics

Slide 2

Slide 2 text

Gabriel Oliva • ! iOS Developer @ AppProva • " Batera; • # Mineiro que: • ☕ = % • & = ' • Co-organizador do CocoaHeads BH [email protected] @gabrieloliva_

Slide 3

Slide 3 text

Agenda • Programação Reativa • Teoria • O que é RxSwift? • Observables • Operadores • Efeitos colaterais • Pratica

Slide 4

Slide 4 text

Programação Reativa • Paradigma orientado por: • fluxo de dados • propagação de mudanças

Slide 5

Slide 5 text

Programação Reativa Isso significa que é possível expressar fluxo de dados estáticos ou dinâmicos e propagar suas mudanças através de seus subfluxos

Slide 6

Slide 6 text

O que é RxSwift? • API multiplataforma chamada Rx • Extensões Reativas • Sequencia de eventos • Composables operators • Programação assíncrona

Slide 7

Slide 7 text

Código assíncrono

Slide 8

Slide 8 text

Observable A classe Observable representa todas as mudanças dos nossos dados como uma sequencia de eventos ao longo do tempo.

Slide 9

Slide 9 text

Observable Essa sequencia pode ser observada de algum lugar do seu código, então não apenas você tem acesso ao seu dado, mas você tem acesso aos eventos de mudanças do seu dado.

Slide 10

Slide 10 text

Observable Você não precisa ser proativo para saber se seu dado foi alterado. O próprio dado te diz quando ele muda e você só precisa reagir à essas mudanças

Slide 11

Slide 11 text

Observable

Slide 12

Slide 12 text

Subjects Subjects é uma "forma especial" de Observable que podemos nos inscrever e adicionar elementos dinamicamente.

Slide 13

Slide 13 text

Operadores Observable Outputs public enum UIInterfaceOrientation : Int { case unknown case portrait case portraitUpsideDown case landscapeLeft case landscapeRight }

Slide 14

Slide 14 text

Operadores: filter

Slide 15

Slide 15 text

Efeitos colaterais Quando nos inscrevemos à um Observable, ele ao longo do tempo vai emitir notificações com os novos valores.

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

Efeitos colaterais Para reagir à essas mudanças, utilizamos o operador doOn. • do(onNext:) - quando você quer fazer algo assim que o evento aconteceu. • do(onError:) - quando um erro é emitido. • do(onCompleted:) - se a sequência foi finalizada.

Slide 18

Slide 18 text

Resumindo • Tenho um elemento que emite eventos • Em algum lugar do meu código eu me inscrevo para receber notificações sobre esses eventos • A partir dessas notificações, eu faço algo

Slide 19

Slide 19 text

Prática let names = Variable([String]) names = ["João", "Maria", "Joana"]

Slide 20

Slide 20 text

Prática names.asObservable() .subscribe(onNext: { value in print(value) }) log: ["João", "Maria", "Joana"]

Slide 21

Slide 21 text

Prática names.asObservable() .map { value in return "Participantes CocoaHeads: \(value)" } .subscribe(onNext: { value in print(value) }) log: "Participantes CocoaHeads: ["João", "Maria", "Joana"]"

Slide 22

Slide 22 text

Prática names.asObservable() .throttle(0.5, scheduler: MainScheduler.instance) .map { value in return "Participantes CocoaHeads: \(value)" } .subscribe(onNext: { value in print(value) }) names = ["João", "Maria", "Joana"] names = ["João"] log: "Participantes CocoaHeads: ["João"]"

Slide 23

Slide 23 text

DEMO

Slide 24

Slide 24 text

Pra onde ir a partir daqui? • Networking • Padrões de delegação • MVVM

Slide 25

Slide 25 text

Perguntas?