Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
RxSwiftを用いたアプリ開発の実践
Search
gomi_ningen
November 27, 2015
Research
44
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RxSwiftを用いたアプリ開発の実践
2015/11/27 - オープンソースライブラリ研究会 - iOS Android Rails編@ビズリーチ
https://connpass.com/event/22476/
gomi_ningen
November 27, 2015
More Decks by gomi_ningen
See All by gomi_ningen
RxSwiftのObservableとは何か | iOSDC Japan 2017
53ningen
0
34
Xamarin.iOS によるプロダクトアプリ開発の実践
53ningen
0
24
この実装には問題がある!
53ningen
0
1.2k
15 minutes recipe of RxSwift
53ningen
0
36
Dependency Injection in Swift2
53ningen
0
40
ITSを用いた旅行の構築
53ningen
0
24
Other Decks in Research
See All in Research
【中間報告】国会議員の立法・政策実務を支える環境を巡る現状と課題
polipoli
0
770
Bilan travail en élevage : première restitution des enquêtes 2025-2026
institutdelelevage
PRO
0
100
La génomique au service de la fromageabilité du lait grâce aux spectres MIR
institutdelelevage
PRO
0
180
PHTalks Bengaluru - SSRF When All Else Fails
dk999
0
1.2k
Karkada さんの論文 × 2 の紹介: (1) Closed-Form Training Dynamics Reveal Learned Features and Linear Structure in Word2Vec-like Models, (2) Symmetry in language statistics shapes the geometry of model representations
eumesy
PRO
1
860
Vector Map as Language: Toward Unified Remote Sensing Vector Mapping
satai
3
320
Evaluation génomique des femelles laitières croisées : comprendre la méthode pour accompagner les éleveurs à son utilisation
institutdelelevage
PRO
0
170
就労支援の現場での生成AI活用
enochan
0
150
Développer des solutions de réduction des émissions de méthane entérique : 1ers résultats Méthane 2030
institutdelelevage
PRO
0
260
Être éleveur dans un monde en transition : Comprendre les changements pour mieux les accompagner
institutdelelevage
PRO
0
140
第64回CV・PRML勉強会 論文紹介:Linguistic Priors for Visual Decoupling: Towards Symmetric Vision-Brain Alignment
sokikatayama
0
250
GLIM とMegaParticles:正規分布近似の限界とタイトカップリング&パーティクルフィルタの進展 / GLIM and MegaParticles : Progress of the distribution representation in SLAM
koide3
0
960
Featured
See All Featured
How GitHub (no longer) Works
holman
316
150k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
630
The agentic SEO stack - context over prompts
schlessera
0
970
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
Rails Girls Zürich Keynote
gr2m
96
14k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
370
Evolving SEO for Evolving Search Engines
ryanjones
0
330
Building Flexible Design Systems
yeseniaperezcruz
330
41k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
How STYLIGHT went responsive
nonsquared
100
6.3k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
Mind Mapping
helmedeiros
1
400
Transcript
3Y4XJGUΛ༻͍ͨΞϓϦ։ൃͷ࣮ફ !HPNJ@OJOHFO
ࣗݾհ • ౦ژͷࣾͰಇࣾ͘ச̎ੜ • ࣄɿόονɾΣϒαʔόʔ(Java)ɾiOSΞϓϦ(Swift) • ͖ͳݴޠJava8 / Scala
/ C# @gomi_ningen
ࣗݾհ • ౦ژͷࣾͰಇࣾ͘ச̎ੜ • ࣄɿόονɾΣϒαʔόʔ(Java)ɾiOSΞϓϦ(Swift) • ͖ͳݴޠJava8 / Scala
/ C# • ݱ࣌Ͱ·ͩiOS։ൃܦݧ̐ϲ݄ఔͷॳ৺ऀ • ͱ͋ΔܦҢͰRxSwiftΛ༻͍ͨΞϓϦΛ࡞ͬͯϦϦʔε͠·ͨ͠ • RxSwift ͷϓϩμΫτͰͷ࣮ફར༻ʹ͍ͭͯ͝հ͠·͢ @gomi_ningen
3Y4XJGUͱʁ RP(Reactive Programming)Λ࣮ݱ͢ΔϥΠϒϥϦͷͻͱͭͰ͋Δ͕… • ͦͦϦΞΫςΟϒϓϩάϥϛϯάͬͯԿʁ • ͦΜͳ͜ͱ͔ͬͯͳͯ͘ϥΠϒϥϦ͑Δ • Լखʹݴ༿Ͱઆ໌͢Δͱ࣮ଶͱζϨͯࠞཚͷݪҼͱͳΔͷͰΒͳ͍
3Y4XJGUͱʁ RP(Reactive Programming)Λ࣮ݱ͢ΔϥΠϒϥϦͷͻͱͭͰ͋Δ͕… • ͦͦϦΞΫςΟϒϓϩάϥϛϯάͬͯԿʁ • ͦΜͳ͜ͱ͔ͬͯͳͯ͘ϥΠϒϥϦ͑Δ • Լखʹݴ༿Ͱઆ໌͢Δͱ࣮ଶͱζϨͯࠞཚͷݪҼͱͳΔͷͰΒͳ͍ Ͱɺࠓճઆ໌͢Δ͜ͱʁ
• RxSwiftͷجຊతͳ;Δ·͍ʹ͍ͭͯ • RxSwift / RxCocoa ΛϓϩμΫτʹͲ͏ΈࠐΜ͔ͩͱ͍͏ • ओʹ௨৴ॲཧͱΠϕϯτॲཧͰͷར༻ࣄྫհ
3Y4XJGUͷجຊతͳ;Δ·͍
3Y4XJGUͷجຊతͳ;Δ·͍ ʮHello, worldʯΛϩάग़ྗ
3Y4XJGUͷجຊతͳ;Δ·͍ ʮHello, worldʯΛϩάग़ྗ UIButton ͷλοϓΠϕϯτऔಘ ϘλϯΛλοϓ͢Δͱϩά͕ग़ྗ͞ΕΔ
3Y4XJGUͷجຊతͳ;Δ·͍ UITextFieldͷೖྗΠϕϯτऔಘͱϑΟϧλϦϯά ςΩετϑΟʔϧυೖྗͯ͘͠ͱɺจࣈ͕̏จࣈҎ্ͷͱ͖͚ͩϩάग़ྗ͞ΕΔ ςΩετϑΟʔϧυೖྗຖʹΠϕϯτ͕ൃߦ͞Εɺfilterͷ݅ΛΫϦΞͨ͠จࣈྻͷΈɺ subscribeNextʹ͞Εɺ࣮ߦ͞ΕΔ
3Y4XJGUͷجຊతͳ;Δ·͍ UISliderͷมߋΠϕϯτऔಘɺͷՃɺUITextFieldͷόΠϯυ
3Y4XJGUͷجຊతͳ;Δ·͍ ΤϥʔͷΛ͍ͤͨ͞ͱ͖ʹඇৗʹศར ˑΤϥʔͷऔΓճ͠Λྫ֎ΛΘͣʹߦ͏͜ͱ͕Ͱ͖Δ ɾflatMapͰ just()ΛฦͤޭΛͤ͞Δ͜ͱ͕Ͱ͖Δ ɾflatMapͰfailWith(NSError) ΛฦͤΤϥʔΛͤ͞Δ͜ͱ͕Ͱ͖Δ
3Y4XJGU3Y$PDPBΛ༻͍ͨ௨৴ॲཧ
௨৴ॲཧؔ࿈Ϋϥεͷߏ ୯७ͳHTTP௨৴͚ͩΛͱͨ͠HttpClient ΞϓϦͰ༻͍ΔAPIૢ࡞Λͱͨ͠ApiClient ΞϓϦͰΘΕΔσʔλΛੜͨ͠Γߋ৽ͨ͠Γ͢ΔRespository ʢͲͷ͔ΒObservableΛฦ͢Α͏ʹ͢Δ͔ٞͷ༨͕͋Δʣ
)551ΫϥΠΞϯτͷ࣮ • NSURLSession ͷ RxCocoa֦ுϝιουrx_responseΛ༻͍Δ • Observable<(NSData!, NSHTTPURLResponse)> Λฦͯ͘͠ΕΔ
)551ΫϥΠΞϯτͷ࣮ • NSURLSession ͷ RxCocoa֦ுϝιουrx_responseΛ༻͍Δ • Observable<(NSData!, NSHTTPURLResponse)> Λฦͯ͘͠ΕΔ •
͜ΕΛੜͰ͏ͷͰͳ͘ɺΫΤϦϔομΛՃͨ͠ΓɺλΠϜΞ τ࣌ؒΛઃఆͰ͖ΔΑ͏ʹ͢ΔɺHTTPΫϥΠΞϯτͷػೳ୯Ґͱ͠ ࣮ͯΛߦ͍·ͨ͠ GitHubͰެ։͍ͯ͠·͢ɿhttps://github.com/53ningen/RxHttp
"1*ΫϥΠΞϯτͷ࣮ • ΞϓϦͰ༻͍ΔΣϒAPIΛϥοϓͨ͠APIΫϥΠΞϯτΛ࡞͢Δ • ਖ਼ৗͳεςʔλείʔυͰ͋ΕɺσγϦΞϥΠζͯ͠ΦϒδΣΫτ ʹϚοϐϯάͨ͠Λྲྀ͢ • ҟৗܥͰ͋ΕɺεςʔλείʔυԠʹԠͨ͡ΤϥʔΛྲྀ͢ • ਖ਼ৗܥͱҟৗܥΛѻ͑ΔObservableྫ֎తঢ়گͷʹศར
"1*ΫϥΠΞϯτͷ࣮ • ΠϯλʔϑΣʔεҎԼͷΑ͏ʹར༻͢ΔΤϯυϙΠϯτ͝ͱʹ ɹϝιουʹΓग़͢ • ͜͏ͯ͠࡞ͨ͠ΣϒAPIΫϥΠΞϯτΛ௨ͯ͠ɺϩδοΫΛॻ͘ͱ ɹΤϥʔॲཧσγϦΞϥΠζͳͲͷڞ௨ॲཧ͕ߦΘΕͨঢ়ଶͰσʔλ ɹͷૢ࡞͕Ͱ͖ΔͷͰɺݟ௨͕͠ྑ͘ͳΔ • APIΫϥΠΞϯτͷ࣮ංେԽ͍͢͠ͷͰ෦࣮Λ͞Βʹந
ɹԽͯ͠ྑ͍͔ͱࢥ͍·͢
3Y$PDPBΛ༻͍ͨ6*Πϕϯτॲཧ
3Y$PDPBΛ༻͍ͨ6*Πϕϯτॲཧ RxCocoaΛimportͯ͠UIίϯϙʔωϯτͷ֦ுϝιουΛར༻͢Δ • UIKitͷओཁͳίϯϙʔωϯτʹObservableΛฦͯ͘͠ΕΔ֦ுϝ ιου͕ఆٛ͞Ε͍ͯΔ • σϦήʔτͰΠϕϯτॲཧΛ͠ͳ͍ܗͷ࣮͕Ͱ͖Δ • ֦ுϝιου͔ΒಘΒΕΔObservableʹରͯ͠ map
filter ͳͲ ͷίϯϏωʔλΛ༻͍Δ͜ͱ͕Ͱ͖Δ • UIίϯϙʔωϯτʹରͯ͠ͲΜͳ֦ுϝιου͕ఆٛ͞Ε͍ͯΔ͔ʹ ͍ͭͯҎԼΛࢀর͢Δͱྑ͍ͱࢥ͍·͢ https://github.com/ReactiveX/RxSwift/blob/master/Documentation/API.md
3Y$PDPBΛ༻͍ͨ6*Πϕϯτॲཧ ௨৴݁ՌΛUIίϯϙʔωϯτʹөͤ͞Δ • ௨৴όοΫάϥϯυεϨουͰɺ݁ՌΛViewʹө͍ͤͨ͞ͱ͖ ϝΠϯεϨουͰߦ͏ඞཁ͕͋Δ • εϨουͷΓସ͑ʹsubscribeOn ͱobserveOn Λ༻͍Δ •
ྫ͑ҎԼͷΑ͏ͳ۩߹
࣮ߦεϨουͷΓସ͑ ͏εέδϡʔϥʔʹΑ࣮ͬͯߦઓུ͕มΘΔ 2015-11-08 07:40:48.946 xctest[10944:2734414] background 2015-11-08 07:40:48.946 xctest[10944:2734359] main
2015-11-08 07:40:48.947 xctest[10944:2734423] background 2015-11-08 07:40:48.947 xctest[10944:2734414] background όοΫάϥϯυͰฒྻʹ࣮ߦ͞Ε͍ͯΔ
࣮ߦεϨουͷΓସ͑ ͏εέδϡʔϥʔʹΑ࣮ͬͯߦઓུ͕มΘΔ 2015-11-08 07:42:37.552 xctest[11125:2735824] main 2015-11-08 07:42:37.552 xctest[11125:2735881] background
2015-11-08 07:42:37.552 xctest[11125:2735881] background 2015-11-08 07:42:37.552 xctest[11125:2735881] background όοΫάϥϯυͰྻʹ࣮ߦ͞Ε͍ͯΔ
3YΛར༻͢Δ͜ͱʹΑΔมԽ
3YΛར༻͢Δ͜ͱʹΑΔมԽ • ίʔϧόοΫΛ΄ͱΜͲΘͣΠϕϯτॲཧͰ͖Δ • શମతʹΠϯσϯτͷઙ͍ίʔυʹͳΔ • ίϯτϩʔϥʔʹΠϕϯτॲཧΛूͰ͖ΔΑ͏ʹͳΔ
3YΛར༻͢Δ͜ͱʹΑΔมԽ • ίʔϧόοΫΛ΄ͱΜͲΘͣΠϕϯτॲཧͰ͖Δ • શମతʹΠϯσϯτͷઙ͍ίʔυʹͳΔ • ίϯτϩʔϥʔʹΠϕϯτॲཧΛूͰ͖ΔΑ͏ʹͳΔ • ͤ͞ΔσʔλͷมܗɾϑΟϧλʔͳͲ͕खܰʹߦ͑Δ •
map filterͳͲ൚༻తͳؔΛར༻Ͱ͖Δ • ίʔϧόοΫॲཧͷܕ߹ΘͤΛߟ͑Δඞཁ͕ͳ͘ͳΔ • એݴతʹΠϕϯτॲཧΛѻ͑ΔΑ͏ʹͳΔ
3YΛར༻͢Δ͜ͱʹΑΔมԽ • ίʔϧόοΫΛ΄ͱΜͲΘͣΠϕϯτॲཧͰ͖Δ • શମతʹΠϯσϯτͷઙ͍ίʔυʹͳΔ • ίϯτϩʔϥʔʹΠϕϯτॲཧΛूͰ͖ΔΑ͏ʹͳΔ • ͤ͞ΔσʔλͷมܗɾϑΟϧλʔͳͲ͕खܰʹߦ͑Δ •
map filterͳͲ൚༻తͳؔΛར༻Ͱ͖Δ • ίʔϧόοΫॲཧͷܕ߹ΘͤΛߟ͑Δඞཁ͕ͳ͘ͳΔ • એݴతʹΠϕϯτॲཧΛѻ͑ΔΑ͏ʹͳΔ • ࣦഊͷΛྫ֎Ͱͳ͍ػߏͰ࣮ݱͰ͖Δ • ྫ֎Λ༻͍ͳ͍ΤϥʔॲཧΛՄೳʹ͢Δ