Slide 1

Slide 1 text

3FBDUJWF$PDPB Ͱͷϑϩʔ੍ޚͷྫ @matuyuji ! ReactiveCocoaษڧձؔ੢ 2014.7.24

Slide 2

Slide 2 text

!NBUVZVKJ w TBGYEFWCMPHTQPUKQ w &NBDT࢖͍

Slide 3

Slide 3 text

3FBDUJWF$PDPB࢖ͬͯ ΞϓϦͭͬͯ͘Έͨ w .JP%BTICPBSE w HJUIVCDPNTBGY.JP%BTICPBSE

Slide 4

Slide 4 text

**+.JPΈ͓ΆΜ"1* w ߴ଎௨৴༻Ϋʔϙϯͷ0/0'' w Ϋʔϙϯ࢒ྔɺ೔ʑͷར༻ྔ w 3&45"1* w 0"VUI +40/

Slide 5

Slide 5 text

΍Δ͜ͱ w +40/औಘ w IUUQTBQJJJKNJPKQNPCJMFEWDPVQPO w IUUQTBQJJJKNJPKQNPCJMFEWMPHQBDLFU w +40/σʔλͷϚʔδ w 0"VUIʹΑΔೝূ τʔΫϯ࠶औಘ

Slide 6

Slide 6 text

΍͍ͬͯΔ͜ͱ w +40/औಘ  " IUUQTBQJJJKNJPKQNPCJMFEWDPVQPO  # IUUQTBQJJJKNJPKQNPCJMFEWMPHQBDLFU w +40/σʔλͷϚʔδ w 0"VUIʹΑΔೝূ τʔΫϯ࠶औಘ → AFNetworking-RACExtensionsͷ rac_startJSONRequestOperationWithRequest: → concat:ͰͱΓ͚͋͑ͣͬͭ͘Δɻ map:಺ͰMantle࢖͔ͬͯΒϚʔδ → ΞΫηετʔΫϯΛnilʹͯ͠࠶࣮ߦ

Slide 7

Slide 7 text

+40/σʔλͷऔಘ (A) (B) rac_startJSONRequest…: defer defer rac_startJSONRequest…: concat: collect NSDict NSDict NSDict × 2 NSArray → AFNetworking-RACExtensionsͷ rac_startJSONRequestOperationWithRequest:

Slide 8

Slide 8 text

γάφϧͰͷΠϕϯτ next completed error id NSError

Slide 9

Slide 9 text

"DPODBU# next completed error NSError id next id completed error NSError

Slide 10

Slide 10 text

+40/σʔλͷऔಘ (A) (B) rac_startJSONRequest…: defer defer rac_startJSONRequest…: concat: collect NSDict NSDict NSDict × 2 NSArray

Slide 11

Slide 11 text

+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:ΛݺͿ

Slide 12

Slide 12 text

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͚ͩฦ͢γάφϧ

Slide 13

Slide 13 text

0"VUIͷೝূ (A) (B) rac_start…: defer defer concat: collect NSDict NSDict NSDict × 2 NSArray rac_start…: concat: authorize catch: NSArray

Slide 14

Slide 14 text

MPBE*OGPSNBUJPO4JHOBM (A) (B) rac_start…: defer defer concat: collect NSDict NSDict NSDict × 2 NSArray rac_start…: concat: authorize catch: NSArray

Slide 15

Slide 15 text

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]; }

Slide 16

Slide 16 text

ϚʔδͱτʔΫϯ࠶औಘ [[[self loadInformationSignal] catch: ^RACSignal *(NSError *error) { if (/*ΞΫηετʔΫϯ͕ແޮ*/) { self.restHelper.accessToken = nil; return [self loadInformationSignal]; } return [RACSignal empty]; //ଞͷΤϥʔ͸͖͋ΒΊΔ }] map:^(NSArray* array) { // MantleͰΦϒδΣΫτ࡞੒͔ͯ͠ΒɺσʔλΛ·ͱΊΔ }];

Slide 17

Slide 17 text

τʔΫϯ࠶औಘ (A) (B) rac_start…: defer defer concat: collect NSDict NSDict NSDict × 2 NSArray rac_start…: concat: authorize catch: NSArray

Slide 18

Slide 18 text

΍ͬͨ͜ͱ w +40/औಘ  " IUUQTBQJJJKNJPKQNPCJMFEWDPVQPO  # IUUQTBQJJJKNJPKQNPCJMFEWMPHQBDLFU w +40/σʔλͷϚʔδ w 0"VUIʹΑΔೝূ τʔΫϯ࠶औಘ → AFNetworking-RACExtensionsͷ rac_startJSONRequestOperationWithRequest: → concat:ͰͱΓ͚͋͑ͣͬͭ͘Δɻ map:಺ͰMantle࢖͔ͬͯΒϚʔδ → ΞΫηετʔΫϯΛnilʹͯ͠࠶࣮ߦ

Slide 19

Slide 19 text

࢖ͬͨϥΠϒϥϦ 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

Slide 20

Slide 20 text

ؔ࿈৘ใ w 3FBDUJWF$PDPBؔ࿈ϦϯΫͷ·ͱΊ w TBGYEFWCMPHTQPUKQSFBDUJWFDPDPBIUNM