Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RxSwift Basics
Search
Gabriel Oliva
September 26, 2017
Programming
0
47
RxSwift Basics
Gabriel Oliva
September 26, 2017
Tweet
Share
More Decks by Gabriel Oliva
See All by Gabriel Oliva
TDC - Acessibilidade no iOS
gabrieloliva
0
39
Acessibilidade no iOS
gabrieloliva
0
110
Abordando TDD no iOS
gabrieloliva
0
39
Other Decks in Programming
See All in Programming
PHPはいつから死んでいるかの調査
chiroruxx
2
420
Scalable Customer Journey Orchestration (CJO)
lewuathe
0
420
dbtのドメイン分割による データ基盤の改善とDigdagとの連携
sakama
0
440
Java 22 Overview
kishida
1
190
Amazon SQSコンシューマー疎結合への旅 - 出張! #DevelopersIO IT技術ブログの中の人が語る勉強会 #3
quiver
0
310
Node.js v22 で変わること
yosuke_furukawa
PRO
11
3.9k
Let's learn code review
riofujimon
2
570
TCAとKMPを用いた新規動画配信アプリ 「ABEMA Live」の設計
tomu28
2
130
try! Swift Tokyo 2024 参加報告 / try! Swift Tokyo 2024 Report
hironytic
0
220
Documentation for users with AsciiDoc and Antora
ahus1
0
370
#phpcon_odawara オープン・クローズドなテストフィクスチャを求めて / open closed test fixtures
77web
3
240
Build Apps for iOS, Android & Desktop in 100% Kotlin With Compose Multiplatform (mDevCamp 2024)
zsmb
0
440
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
13
8.3k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Thoughts on Productivity
jonyablonski
60
3.9k
Making Projects Easy
brettharned
109
5.5k
Practical Orchestrator
shlominoach
183
9.7k
Visualization
eitanlees
137
14k
How to Ace a Technical Interview
jacobian
273
22k
Writing Fast Ruby
sferik
622
60k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
26
2.3k
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
Building Adaptive Systems
keathley
32
1.9k
Into the Great Unknown - MozCon
thekraken
14
1k
Transcript
RxSwift Basics
Gabriel Oliva • ! iOS Developer @ AppProva • "
Batera; • # Mineiro que: • ☕ = % • & = ' • Co-organizador do CocoaHeads BH
[email protected]
@gabrieloliva_
Agenda • Programação Reativa • Teoria • O que é
RxSwift? • Observables • Operadores • Efeitos colaterais • Pratica
Programação Reativa • Paradigma orientado por: • fluxo de dados
• propagação de mudanças
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
O que é RxSwift? • API multiplataforma chamada Rx •
Extensões Reativas • Sequencia de eventos • Composables operators • Programação assíncrona
Código assíncrono
Observable A classe Observable representa todas as mudanças dos nossos
dados como uma sequencia de eventos ao longo do tempo.
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.
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
Observable<Int>
Subjects Subjects é uma "forma especial" de Observable que podemos
nos inscrever e adicionar elementos dinamicamente.
Operadores Observable<UIInterfaceOrientation> Outputs public enum UIInterfaceOrientation : Int { case
unknown case portrait case portraitUpsideDown case landscapeLeft case landscapeRight }
Operadores: filter
Efeitos colaterais Quando nos inscrevemos à um Observable, ele ao
longo do tempo vai emitir notificações com os novos valores.
None
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.
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
Prática let names = Variable([String]) names = ["João", "Maria", "Joana"]
Prática names.asObservable() .subscribe(onNext: { value in print(value) }) log: ["João",
"Maria", "Joana"]
Prática names.asObservable() .map { value in return "Participantes CocoaHeads: \(value)"
} .subscribe(onNext: { value in print(value) }) log: "Participantes CocoaHeads: ["João", "Maria", "Joana"]"
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"]"
DEMO
Pra onde ir a partir daqui? • Networking • Padrões
de delegação • MVVM
Perguntas?