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
19
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
14
Xamarin.iOS によるプロダクトアプリ開発の実践
53ningen
0
9
この実装には問題がある!
53ningen
0
1.1k
15 minutes recipe of RxSwift
53ningen
0
11
Dependency Injection in Swift2
53ningen
0
17
ITSを用いた旅行の構築
53ningen
0
10
Other Decks in Research
See All in Research
ゼロからわかるリザバーコンピューティング
kurotaky
1
310
生成AIを用いたText to SQLの最前線
masatoto
1
2.4k
メタ動画データセットによる動作認識の現状と可能性
yuyay
0
210
Deep State Space Models 101 / Mamba
kurita
9
3.6k
MegaParticles: GPUを利用したStein Particle Filterによる点群6自由度姿勢推定
koide3
1
540
媒介分析と疫学
kingqwert
0
100
Sosiaalisen median katsaus 02/2024
hponka
0
2.7k
第4回ナレッジグラフ勉強会:ISWC2023論文読み会
kg_wakate
1
210
待機電力を削減したネットワーク更新型電子ペーパーサイネージの開発と評価 / IOT64
yumulab
0
110
SANER 2019 Most Influential Paper Talk
tsantalis
0
120
論文紹介 DISN: Deep Implicit Surface Network for High quality Single-view 3D Reconstruction / DISN: Deep Implicit Surface Network for High quality Single-view 3D Reconstruction
nttcom
0
120
機械学習と数理最適化の融合-文脈付き確率的最短路を例として-
mickey_kubo
1
440
Featured
See All Featured
Embracing the Ebb and Flow
colly
80
4.2k
Documentation Writing (for coders)
carmenintech
61
4k
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
245
20k
Infographics Made Easy
chrislema
238
18k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
41
4.4k
jQuery: Nuts, Bolts and Bling
dougneiner
59
7.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
21
1.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
117
18k
How STYLIGHT went responsive
nonsquared
92
4.8k
Writing Fast Ruby
sferik
622
60k
Building a Scalable Design System with Sketch
lauravandoore
457
32k
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ͳͲ൚༻తͳؔΛར༻Ͱ͖Δ • ίʔϧόοΫॲཧͷܕ߹ΘͤΛߟ͑Δඞཁ͕ͳ͘ͳΔ • એݴతʹΠϕϯτॲཧΛѻ͑ΔΑ͏ʹͳΔ • ࣦഊͷΛྫ֎Ͱͳ͍ػߏͰ࣮ݱͰ͖Δ • ྫ֎Λ༻͍ͳ͍ΤϥʔॲཧΛՄೳʹ͢Δ