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を用いたアプリ開発の実践
Search
gomi_ningen
November 27, 2015
Research
0
27
RxSwiftを用いたアプリ開発の実践
2015/11/27 - オープンソースライブラリ研究会 - iOS Android Rails編@ビズリーチ
https://connpass.com/event/22476/
gomi_ningen
November 27, 2015
Tweet
Share
More Decks by gomi_ningen
See All by gomi_ningen
RxSwiftのObservableとは何か | iOSDC Japan 2017
53ningen
0
19
Xamarin.iOS によるプロダクトアプリ開発の実践
53ningen
0
13
この実装には問題がある!
53ningen
0
1.1k
15 minutes recipe of RxSwift
53ningen
0
22
Dependency Injection in Swift2
53ningen
0
25
ITSを用いた旅行の構築
53ningen
0
14
Other Decks in Research
See All in Research
Language Models Are Implicitly Continuous
eumesy
PRO
0
230
Towards a More Efficient Reasoning LLM: AIMO2 Solution Summary and Introduction to Fast-Math Models
analokmaus
2
790
投資戦略202508
pw
0
560
SegEarth-OV: Towards Training-Free Open-Vocabulary Segmentation for Remote Sensing Images
satai
3
170
「どう育てるか」より「どう働きたいか」〜スクラムマスターの最初の一歩〜
hirakawa51
0
860
生成的推薦の人気バイアスの分析:暗記の観点から / JSAI2025
upura
0
260
AWSで実現した大規模日本語VLM学習用データセット "MOMIJI" 構築パイプライン/buiding-momiji
studio_graph
2
490
Vision and LanguageからのEmbodied AIとAI for Science
yushiku
PRO
1
530
時系列データに対する解釈可能な 決定木クラスタリング
mickey_kubo
2
930
[輪講] SigLIP 2: Multilingual Vision-Language Encoders with Improved Semantic Understanding, Localization, and Dense Features
nk35jk
2
980
大規模な2値整数計画問題に対する 効率的な重み付き局所探索法
mickey_kubo
1
360
A scalable, annual aboveground biomass product for monitoring carbon impacts of ecosystem restoration projects
satai
4
230
Featured
See All Featured
The Language of Interfaces
destraynor
161
25k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Become a Pro
speakerdeck
PRO
29
5.5k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Context Engineering - Making Every Token Count
addyosmani
1
36
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
For a Future-Friendly Web
brad_frost
180
9.9k
Visualization
eitanlees
148
16k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
840
How GitHub (no longer) Works
holman
315
140k
How to Ace a Technical Interview
jacobian
279
23k
Thoughts on Productivity
jonyablonski
70
4.8k
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ͳͲ൚༻తͳؔΛར༻Ͱ͖Δ • ίʔϧόοΫॲཧͷܕ߹ΘͤΛߟ͑Δඞཁ͕ͳ͘ͳΔ • એݴతʹΠϕϯτॲཧΛѻ͑ΔΑ͏ʹͳΔ • ࣦഊͷΛྫ֎Ͱͳ͍ػߏͰ࣮ݱͰ͖Δ • ྫ֎Λ༻͍ͳ͍ΤϥʔॲཧΛՄೳʹ͢Δ