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
Grounding Text Complexity Control in Defined Linguistic Difficulty [Keynote@*SEM2025]
yukiar
0
110
競合や要望に流されない─B2B SaaSでミニマム要件を決めるリアルな取り組み / Don't be swayed by competitors or requests - A real effort to determine minimum requirements for B2B SaaS
kaminashi
0
760
An Open and Reproducible Deep Research Agent for Long-Form Question Answering
ikuyamada
0
280
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
340
[チュートリアル] 電波マップ構築入門 :研究動向と課題設定の勘所
k_sato
0
260
LiDARセキュリティ最前線(2025年)
kentaroy47
0
140
自動運転におけるデータ駆動型AIに対する安全性の考え方 / Safety Engineering for Data-Driven AI in Autonomous Driving Systems
ishikawafyu
0
130
AWSの耐久性のあるRedis互換KVSのMemoryDBについての論文を読んでみた
bootjp
1
460
2026.01ウェビナー資料
elith
0
220
生成AI による論文執筆サポート・ワークショップ ─ サーベイ/リサーチクエスチョン編 / Workshop on AI-Assisted Paper Writing Support: Survey/Research Question Edition
ks91
PRO
0
140
LLMアプリケーションの透明性について
fufufukakaka
0
150
SREはサイバネティクスの夢をみるか? / Do SREs Dream of Cybernetics?
yuukit
3
390
Featured
See All Featured
What does AI have to do with Human Rights?
axbom
PRO
0
2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Fireside Chat
paigeccino
41
3.8k
Docker and Python
trallard
47
3.7k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
330
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.7k
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
Testing 201, or: Great Expectations
jmmastey
46
8.1k
We Are The Robots
honzajavorek
0
170
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
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ͳͲ൚༻తͳؔΛར༻Ͱ͖Δ • ίʔϧόοΫॲཧͷܕ߹ΘͤΛߟ͑Δඞཁ͕ͳ͘ͳΔ • એݴతʹΠϕϯτॲཧΛѻ͑ΔΑ͏ʹͳΔ • ࣦഊͷΛྫ֎Ͱͳ͍ػߏͰ࣮ݱͰ͖Δ • ྫ֎Λ༻͍ͳ͍ΤϥʔॲཧΛՄೳʹ͢Δ