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
51
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
53
Acessibilidade no iOS
gabrieloliva
0
130
Abordando TDD no iOS
gabrieloliva
0
42
Other Decks in Programming
See All in Programming
대규모 트래픽을 처리하는 프론트 개발자의 전략
maryang
0
120
令和最新版手のひらコンピュータ
koba789
13
7.7k
Comparing decimals in Swift Testing
417_72ki
0
170
Infer入門
riru
4
1.5k
ワープロって実は計算機で
pepepper
2
1.3k
iOS開発スターターキットの作り方
akidon0000
0
240
管你要 trace 什麼、bpftrace 用下去就對了 — COSCUP 2025
shunghsiyu
0
410
AIのメモリー
watany
13
1.4k
0から始めるモジュラーモノリス-クリーンなモノリスを目指して
sushi0120
0
280
「リーダーは意思決定する人」って本当?~ 学びを現場で活かす、リーダー4ヶ月目の試行錯誤 ~
marina1017
0
220
202507_ADKで始めるエージェント開発の基本 〜デモを通じて紹介〜(奥田りさ)The Basics of Agent Development with ADK — A Demo-Focused Introduction
risatube
PRO
6
1.5k
コーディングは技術者(エンジニア)の嗜みでして / Learning the System Development Mindset from Rock Lady
mackey0225
2
480
Featured
See All Featured
A better future with KSS
kneath
239
17k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Thoughts on Productivity
jonyablonski
69
4.8k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
How STYLIGHT went responsive
nonsquared
100
5.7k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Raft: Consensus for Rubyists
vanstee
140
7.1k
The Language of Interfaces
destraynor
158
25k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
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?