Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ReactiveCocoaでのフロー制御の例
Search
matuyuji
July 26, 2014
Programming
0
3.5k
ReactiveCocoaでのフロー制御の例
ReactiveCocoa 2.xを使ったサンプルアプリでのフロー制御例を紹介します。
matuyuji
July 26, 2014
Tweet
Share
More Decks by matuyuji
See All by matuyuji
Emacs × Touch Bar
matuyuji
2
1.9k
ARKit + SceneKitでMinesweeperを作ってみた
matuyuji
1
810
Go + QtでiOS アプリ開発
matuyuji
0
410
@_specialized なお話し
matuyuji
0
500
Xcode Souce Code Extensionを使ってみた
matuyuji
0
420
Codebeatを 試してみた
matuyuji
0
790
React Nativeで UIコンポーネントをつくる
matuyuji
0
1k
React Nativeを使ってみた
matuyuji
0
1.4k
SwiftでLens
matuyuji
1
1k
Other Decks in Programming
See All in Programming
AIコーディングエージェント(Gemini)
kondai24
0
240
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
130
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
740
Github Copilotのチャット履歴ビューワーを作りました~WPF、dotnet10もあるよ~ #clrh111
katsuyuzu
0
120
Graviton と Nitro と私
maroon1st
0
110
Go コードベースの構成と AI コンテキスト定義
andpad
0
130
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
160
Navigating Dependency Injection with Metro
l2hyunwoo
1
150
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
780
開発に寄りそう自動テストの実現
goyoki
2
1.2k
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
350
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
160
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Fireside Chat
paigeccino
41
3.8k
Crafting Experiences
bethany
0
19
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
98
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
87
Prompt Engineering for Job Search
mfonobong
0
110
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
57
37k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
For a Future-Friendly Web
brad_frost
180
10k
How to Ace a Technical Interview
jacobian
281
24k
Transcript
3FBDUJWF$PDPB Ͱͷϑϩʔ੍ޚͷྫ @matuyuji ! ReactiveCocoaษڧձؔ 2014.7.24
!NBUVZVKJ w TBGYEFWCMPHTQPUKQ w &NBDT͍
3FBDUJWF$PDPBͬͯ ΞϓϦͭͬͯ͘Έͨ w .JP%BTICPBSE w HJUIVCDPNTBGY.JP%BTICPBSE
**+.JPΈ͓ΆΜ"1* w ߴ௨৴༻Ϋʔϙϯͷ0/0'' w Ϋʔϙϯྔɺʑͷར༻ྔ w 3&45"1* w 0"VUI +40/
Δ͜ͱ w +40/औಘ w IUUQTBQJJJKNJPKQNPCJMFEWDPVQPO w IUUQTBQJJJKNJPKQNPCJMFEWMPHQBDLFU w +40/σʔλͷϚʔδ w
0"VUIʹΑΔೝূ τʔΫϯ࠶औಘ
͍ͬͯΔ͜ͱ w +40/औಘ " IUUQTBQJJJKNJPKQNPCJMFEWDPVQPO # IUUQTBQJJJKNJPKQNPCJMFEWMPHQBDLFU w
+40/σʔλͷϚʔδ w 0"VUIʹΑΔೝূ τʔΫϯ࠶औಘ → AFNetworking-RACExtensionsͷ rac_startJSONRequestOperationWithRequest: → concat:ͰͱΓ͚͋͑ͣͬͭ͘Δɻ map:ͰMantle͔ͬͯΒϚʔδ → ΞΫηετʔΫϯΛnilʹͯ͠࠶࣮ߦ
+40/σʔλͷऔಘ (A) (B) rac_startJSONRequest…: defer defer rac_startJSONRequest…: concat: collect NSDict
NSDict NSDict × 2 NSArray → AFNetworking-RACExtensionsͷ rac_startJSONRequestOperationWithRequest:
γάφϧͰͷΠϕϯτ next completed error id NSError
"DPODBU# next completed error NSError id next id completed error
NSError
+40/σʔλͷऔಘ (A) (B) rac_startJSONRequest…: defer defer rac_startJSONRequest…: concat: collect NSDict
NSDict NSDict × 2 NSArray
+40/σʔλͷऔಘ - (RACSignal*)loadInformationSignal { RACSignal* coupon = [RACSignal defer:^RACSignal* {
return [self.restHelper getCoupon]; }]; ! RACSignal* packet = [RACSignal defer:^RACSignal* { return [self.restHelper getPacket]; }]; ! RACSignal* sig = [[coupon concat:packet] collect]; return sig; } தͰrac_startJSONRequestOperationWithRequest:ΛݺͿ
0"VUIͷೝূ - (RACSignal*)loadInformationSignal { RACSignal* coupon = [RACSignal defer:^RACSignal* {
return [self.restHelper getCoupon]; }]; ! RACSignal* packet = [RACSignal defer:^RACSignal* { return [self.restHelper getPacket]; }]; ! RACSignal* sig = [[coupon concat:packet] collect]; return self.restHelper.accessToken ? sig : [[[self.restHelper authorize] catch:self.errorBlock] concat:sig]; } complete͔error͚ͩฦ͢γάφϧ
0"VUIͷೝূ (A) (B) rac_start…: defer defer concat: collect NSDict NSDict
NSDict × 2 NSArray rac_start…: concat: authorize catch: NSArray
MPBE*OGPSNBUJPO4JHOBM (A) (B) rac_start…: defer defer concat: collect NSDict NSDict
NSDict × 2 NSArray rac_start…: concat: authorize catch: NSArray
MPBE*OGPSNBUJPO4JHOBM - (RACSignal*)loadInformationSignal { RACSignal* coupon = [RACSignal defer:^RACSignal* {
return [self.restHelper getCoupon]; }]; ! RACSignal* packet = [RACSignal defer:^RACSignal* { return [self.restHelper getPacket]; }]; ! RACSignal* sig = [[coupon concat:packet] collect]; return self.restHelper.accessToken ? sig : [[[self.restHelper authorize] catch:self.errorBlock] concat:sig]; }
ϚʔδͱτʔΫϯ࠶औಘ [[[self loadInformationSignal] catch: ^RACSignal *(NSError *error) { if (/*ΞΫηετʔΫϯ͕ແޮ*/)
{ self.restHelper.accessToken = nil; return [self loadInformationSignal]; } return [RACSignal empty]; //ଞͷΤϥʔ͖͋ΒΊΔ }] map:^(NSArray* array) { // MantleͰΦϒδΣΫτ࡞͔ͯ͠ΒɺσʔλΛ·ͱΊΔ }];
τʔΫϯ࠶औಘ (A) (B) rac_start…: defer defer concat: collect NSDict NSDict
NSDict × 2 NSArray rac_start…: concat: authorize catch: NSArray
ͬͨ͜ͱ w +40/औಘ " IUUQTBQJJJKNJPKQNPCJMFEWDPVQPO # IUUQTBQJJJKNJPKQNPCJMFEWMPHQBDLFU w
+40/σʔλͷϚʔδ w 0"VUIʹΑΔೝূ τʔΫϯ࠶औಘ → AFNetworking-RACExtensionsͷ rac_startJSONRequestOperationWithRequest: → concat:ͰͱΓ͚͋͑ͣͬͭ͘Δɻ map:ͰMantle͔ͬͯΒϚʔδ → ΞΫηετʔΫϯΛnilʹͯ͠࠶࣮ߦ
ͬͨϥΠϒϥϦ w 3FBDUJWF$PDPB w "'/FUXPSLJOH3"$&YUFOTJPOT w 6OEFSTDPSFN w .BOUMF w
58.FTTBHF#BS.BOBHFS w 75"DLOPXMFEHFNFOUT7JFX$POUSPMMFS w 9:1JF$IBSU w J041MPU
ؔ࿈ใ w 3FBDUJWF$PDPBؔ࿈ϦϯΫͷ·ͱΊ w TBGYEFWCMPHTQPUKQSFBDUJWFDPDPBIUNM