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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
gomi_ningen
November 27, 2015
Research
0
31
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
21
Xamarin.iOS によるプロダクトアプリ開発の実践
53ningen
0
16
この実装には問題がある!
53ningen
0
1.1k
15 minutes recipe of RxSwift
53ningen
0
26
Dependency Injection in Swift2
53ningen
0
27
ITSを用いた旅行の構築
53ningen
0
17
Other Decks in Research
See All in Research
データサイエンティストをめぐる環境の違い2025年版〈一般ビジネスパーソン調査の国際比較〉
datascientistsociety
PRO
0
710
[Devfest Incheon 2025] 모두를 위한 친절한 언어모델(LLM) 학습 가이드
beomi
2
1.4k
自動運転におけるデータ駆動型AIに対する安全性の考え方 / Safety Engineering for Data-Driven AI in Autonomous Driving Systems
ishikawafyu
0
130
J-RAGBench: 日本語RAGにおける Generator評価ベンチマークの構築
koki_itai
0
1.3k
POI: Proof of Identity
katsyoshi
0
140
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
110
A History of Approximate Nearest Neighbor Search from an Applications Perspective
matsui_528
1
160
"主観で終わらせない"定性データ活用 ― プロダクトディスカバリーを加速させるインサイトマネジメント / Utilizing qualitative data that "doesn't end with subjectivity" - Insight management that accelerates product discovery
kaminashi
15
20k
一般道の交通量減少と速度低下についての全国分析と熊本市におけるケーススタディ(20251122 土木計画学研究発表会)
trafficbrain
0
160
離散凸解析に基づく予測付き離散最適化手法 (IBIS '25)
taihei_oki
PRO
1
690
ForestCast: Forecasting Deforestation Risk at Scale with Deep Learning
satai
3
400
さまざまなAgent FrameworkとAIエージェントの評価
ymd65536
1
420
Featured
See All Featured
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
80
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
120
Mobile First: as difficult as doing things right
swwweet
225
10k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
140
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.4k
Prompt Engineering for Job Search
mfonobong
0
160
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
430
Paper Plane
katiecoart
PRO
0
46k
Visualization
eitanlees
150
17k
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ͳͲ൚༻తͳؔΛར༻Ͱ͖Δ • ίʔϧόοΫॲཧͷܕ߹ΘͤΛߟ͑Δඞཁ͕ͳ͘ͳΔ • એݴతʹΠϕϯτॲཧΛѻ͑ΔΑ͏ʹͳΔ • ࣦഊͷΛྫ֎Ͱͳ͍ػߏͰ࣮ݱͰ͖Δ • ྫ֎Λ༻͍ͳ͍ΤϥʔॲཧΛՄೳʹ͢Δ