Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
YY
Uploaded by
Yongha Yoo
1,628 views
RxSwift 예제로 감잡기
RxSwift를 시작하며 감을 잡아보는 간단한 예제 코드
Software
◦
Read more
6
Save
Share
Embed
Embed presentation
Download
Downloaded 14 times
1
/ 31
2
/ 31
3
/ 31
4
/ 31
5
/ 31
6
/ 31
7
/ 31
8
/ 31
9
/ 31
10
/ 31
11
/ 31
12
/ 31
13
/ 31
14
/ 31
15
/ 31
16
/ 31
17
/ 31
18
/ 31
19
/ 31
20
/ 31
21
/ 31
22
/ 31
23
/ 31
24
/ 31
25
/ 31
26
/ 31
27
/ 31
28
/ 31
29
/ 31
30
/ 31
31
/ 31
More Related Content
PDF
Practical JavaScript Programming - Session 3/8
by
Wilson Su
PDF
Testování prakticky
by
Filip Procházka
PPTX
Gestire l'asincronia in javascript uno sguardo al futuro!
by
ApuliaSoft
PDF
Aller plus loin avec Doctrine2
by
André Tapia
PPTX
es6.concurrency()
by
Ingvar Stepanyan
PDF
アプリ設定の保存をシンプルに
by
susan335
PDF
Iteratory
by
Łukasz Kużyński
PDF
Jquery2
by
Inbal Geffen
Practical JavaScript Programming - Session 3/8
by
Wilson Su
Testování prakticky
by
Filip Procházka
Gestire l'asincronia in javascript uno sguardo al futuro!
by
ApuliaSoft
Aller plus loin avec Doctrine2
by
André Tapia
es6.concurrency()
by
Ingvar Stepanyan
アプリ設定の保存をシンプルに
by
susan335
Iteratory
by
Łukasz Kużyński
Jquery2
by
Inbal Geffen
What's hot
PDF
Twig, los mejores trucos y técnicas avanzadas
by
Javier Eguiluz
PDF
aggregation and indexing with suitable example using MongoDB.
by
bhavesh lande
PDF
Practical JavaScript Programming - Session 2/8
by
Wilson Su
PDF
Jak zabít několik much jednou ranou přechodem na fragmenty
by
David Vávra
PPTX
Jquery ui, ajax
by
Ricardo Cavalcanti
KEY
Pimp your site with jQuery!
by
Elliott Kember
PDF
JQuery
by
koji lin
PDF
Silex al límite
by
Javier Eguiluz
PDF
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
by
Loïc Knuchel
DOC
Dwr实战
by
yiditushe
PDF
jQuery PLUGIN
by
blueweb_sk
PDF
UISearchController par Stéphane sudre
by
CocoaHeads France
PDF
Devsumi Openjam
by
Kiyotaka Oku
PDF
Javascript and jQuery for Mobile
by
Ivano Malavolta
PDF
Collection pipeline par Mathieu Godart
by
CocoaHeads France
PDF
Sis quiz
by
Clesio Veloso
DOCX
Semana 12 interfaces gráficas de usuario
by
TerryJoss
PDF
Underscore.js
by
Sebastian Motraghi
PPTX
Java осень 2012 лекция 6
by
Technopark
PDF
Jquery p1
by
zientuni
Twig, los mejores trucos y técnicas avanzadas
by
Javier Eguiluz
aggregation and indexing with suitable example using MongoDB.
by
bhavesh lande
Practical JavaScript Programming - Session 2/8
by
Wilson Su
Jak zabít několik much jednou ranou přechodem na fragmenty
by
David Vávra
Jquery ui, ajax
by
Ricardo Cavalcanti
Pimp your site with jQuery!
by
Elliott Kember
JQuery
by
koji lin
Silex al límite
by
Javier Eguiluz
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
by
Loïc Knuchel
Dwr实战
by
yiditushe
jQuery PLUGIN
by
blueweb_sk
UISearchController par Stéphane sudre
by
CocoaHeads France
Devsumi Openjam
by
Kiyotaka Oku
Javascript and jQuery for Mobile
by
Ivano Malavolta
Collection pipeline par Mathieu Godart
by
CocoaHeads France
Sis quiz
by
Clesio Veloso
Semana 12 interfaces gráficas de usuario
by
TerryJoss
Underscore.js
by
Sebastian Motraghi
Java осень 2012 лекция 6
by
Technopark
Jquery p1
by
zientuni
RxSwift 예제로 감잡기
1.
RxSwift 예제로 감잡기 RxSwift
시작을 위한 간단한 예제들 유용하 @inkyfox github.com/inkyfox
2.
ReactiveX • 왜 쓰는가? •
장점? • 설치는? • 비동기.. 함수형.. LINQ.. MVVM..? • Observable? Observer?
3.
ReactiveX • 왜 쓰는가? •
장점? • 설치는? • 비동기.. 함수형.. LINQ.. MVVM..? • Observable? Observer? 일단 생략
4.
ReactiveX 먼저 코드 예제를
보며 감을 잡아 보는 걸로
5.
UI Event func reload()
{ } func setup() { reloadButton.rx.tap // Observable<Void> .subscribe(onNext: { [weak self] in self?.reload() }) .addDisposableTo(disposeBag) }
6.
UI Event func reload()
{ } func setup() { reloadButton.rx.tap // Observable<Void> .subscribe(onNext: { [weak self] in self?.reload() }) .addDisposableTo(disposeBag) }
7.
UI Event func reload()
{ } func setup() { reloadButton.rx.tap // Observable<Void> .bindNext(reload) .addDisposableTo(disposeBag) }
8.
UI Event func reload()
{ } func setup() { reloadButton.rx.tap // Observable<Void> .do(onNext: { print(“Reload Button Clicked.”) Analytics.buttonReload.send() }) .bindNext(reload) .addDisposableTo(disposeBag) }
9.
UI Event func reload()
{ } func setup() { reloadButton.rx.tap // Observable<Void> .debounce(0.3, scheduler: MainScheduler.instance) .do(onNext: { print(“Reload Button Clicked.”) Analytics.buttonReload.send() }) .bindNext(reload) .addDisposableTo(disposeBag) }
10.
REST API func reload()
{ API.default.request(.getPage) // Observable<JSON> .map { json in Page(json: json) } // Observable<Page> .observeOn(MainScheduler.instance) .subscribe(onNext: { [weak self] page in self?.display(page: page) }) .addDisposableTo(reloadDisposeBag) } func display(page: Page) { }
11.
REST API func reload()
{ API.default.request(.getPage) // Observable<JSON> .map { json in Page(json: json) } // Observable<Page> .observeOn(MainScheduler.instance) .subscribe(onNext: { [weak self] page in self?.display(page: page) }) .addDisposableTo(reloadDisposeBag) } func display(page: Page) { }
12.
REST API func reload()
{ API.default.request(.getPage) // Observable<JSON> .map { json in Page(json: json) } // Observable<Page> .observeOn(MainScheduler.instance) .subscribe(onNext: { [weak self] page in self?.display(page: page) }) .addDisposableTo(reloadDisposeBag) } func display(page: Page) { }
13.
REST API func reload()
{ API.default.request(.getPage) // Observable<JSON> .map { json in Page(json: json) } // Observable<Page> .observeOn(MainScheduler.instance) .bindNext(display) .addDisposableTo(reloadDisposeBag) } func display(page: Page) { }
14.
REST API func reload()
{ API.default.request(.getPage) // Observable<JSON> .map { Page(json: $0) } // Observable<Page> .observeOn(MainScheduler.instance) .bindNext(display) .addDisposableTo(reloadDisposeBag) } func display(page: Page) { }
15.
REST API func reload()
{ API.default.request(.getPage) // Observable<JSON> .retry(2) .map { Page(json: $0) } // Observable<Page> .observeOn(MainScheduler.instance) .bindNext(display) .addDisposableTo(reloadDisposeBag) } func display(page: Page) { }
16.
REST API func reload()
{ API.default.request(.getPage) // Observable<JSON> .subscribeOn(SerialDispatchQueueScheduler(qos: .background)) .retry(2) .observeOn(ConcurrentDispatchQueueScheduler(qos: .background)) .map(Page.init) // Observable<Page> .observeOn(MainScheduler.instance) .bindNext(display) .addDisposableTo(reloadDisposeBag) } func display(page: Page) { }
17.
REST API func reload()
{ API.default.request(.getPage) // Observable<JSON> .subscribeOn(SerialDispatchQueueScheduler(qos: .background)) .retry(2) .observeOn(ConcurrentDispatchQueueScheduler(qos: .background)) .map(Page.init) // Observable<Page> .observeOn(MainScheduler.instance) .do( onNext: { print("Reload success: ($0)") }, onError: { error in print("Reload failed! (error)") }, onCompleted: { print("Reload completed") } ) .bindNext(display) .addDisposableTo(reloadDisposeBag) }
18.
Property Binding let isReloading:
Variable<Bool> = Variable(false) func setup() { isReloading.asObservable() // Observable<Bool> .observeOn(MainScheduler.instance) .subscribe(onNext: { [weak self] reloading in self?.reloadButton.isEnabled = !reloading }) .addDisposableTo(disposeBag) }
19.
Property Binding let isReloading:
Variable<Bool> = Variable(false) func setup() { isReloading.asObservable() // Observable<Bool> .observeOn(MainScheduler.instance) .subscribe(onNext: { [weak self] reloading in self?.reloadButton.isEnabled = !reloading }) .addDisposableTo(disposeBag) }
20.
Property Binding let isReloading:
Variable<Bool> = Variable(false) func setup() { isReloading.asObservable() // Observable<Bool> .map { !$0 } .observeOn(MainScheduler.instance) .subscribe(onNext: { [weak self] enabled in self?.reloadButton.isEnabled = enabled }) .addDisposableTo(disposeBag) }
21.
Property Binding let isReloading:
Variable<Bool> = Variable(false) func setup() { isReloading.asObservable() // Observable<Bool> .map { !$0 } .observeOn(MainScheduler.instance) .subscribe(onNext: { [weak self] enabled in self?.reloadButton.isEnabled = enabled }) .addDisposableTo(disposeBag) }
22.
Property Binding let isReloading:
Variable<Bool> = Variable(false) func setup() { isReloading.asObservable() // Observable<Bool> .map { !$0 } .observeOn(MainScheduler.instance) .bindTo(reloadButton.rx.isEnabled) .addDisposableTo(disposeBag) }
23.
Merge Operator let isReloading:
Variable<Bool> = Variable(false) func setup() { isReloading.asObservable() // Observable<Bool> .map { !$0 } .bindTo(reloadButton.rx.isEnabled) .addDisposableTo(disposeBag) reloadButton.rx.tap // Observable<Void> .map { false } // Observable<Bool> .bindTo(reloadButton.rx.isEnabled) .addDisposableTo(disposeBag) }
24.
Merge Operator let isReloading:
Variable<Bool> = Variable(false) func setup() { isReloading.asObservable() // Observable<Bool> .map { !$0 } .bindTo(reloadButton.rx.isEnabled) .addDisposableTo(disposeBag) reloadButton.rx.tap // Observable<Void> .map { false } // Observable<Bool> .bindTo(reloadButton.rx.isEnabled) .addDisposableTo(disposeBag) }
25.
Merge Operator let isReloading:
Variable<Bool> = Variable(false) func setup() { isReloading.asObservable() // Observable<Bool> .map { !$0 } .bindTo(reloadButton.rx.isEnabled) .addDisposableTo(disposeBag) reloadButton.rx.tap // Observable<Void> .map { false } // Observable<Bool> .bindTo(reloadButton.rx.isEnabled) .addDisposableTo(disposeBag) }
26.
Merge Operator let isReloading:
Variable<Bool> = Variable(false) func setup() { Observable.from( [isReloading.asObservable().map { !$0 }, reloadButton.rx.tap.map { false } ] ).merge() // Observable<Bool> .bindTo(reloadButton.rx.isEnabled) .addDisposableTo(disposeBag) }
27.
Operators let isReloading: Variable<Bool>
= Variable(false) func setup() { isReloading.asObservable() // |-F-T-F-T-F- .filter { $0 == false } // |-F---F---F- .skip(1) // |-----F---F- .take(1) // |-----F| .observeOn(MainScheduler.instance) .bindTo(messageView.rx.isHidden) .addDisposableTo(disposeBag) }
28.
그 밖에 • NotificationCenter •
Animation • 등의 모든 이벤트 • 예제: https://github.com/inkyfox/RxCurrency_iOS
29.
ReactiveX • Pulling이 아닌
Pushing Data (수동적) • LINQ style 연산자 & 함수형 프로그래밍 • 비동기 (Async) 프로그래밍
30.
ReactiveX 앞의 예제들을 Callback (Delegate
pattern)으로 했으면 어땠을까 상상해봅시다
31.
공부 • http://www.introtorx.com • http://reactivex.io/intro.html •
http://rxmarbles.com • https://github.com/ReactiveX/RxSwift/tree/master/ Documentation
Download