Slide 1

Slide 1 text

3Y4XJGUͰΤϥʔΛ෼ذ͢Δ 5JQT ࠓ৓ળۣ!ZJNBKP QPUBUPUJQT4NBSU/FXTࣾ։࠵ ͬͯςΩετ͕ग़͖ͯͨΒͦ͜͸੝Γ্͕ΓϙΠϯτͰ͢ʂ 3FDZDMFE"MVNJOJVN Ҏ߱ͷεϥΠυʹ

Slide 2

Slide 2 text

ࣗݾ঺հ

Slide 3

Slide 3 text

J04ΞϓϦ։ൃܥͷٕज़ಉਓࢽΛ#005)Ͱެ։͍ͯ͠·͢ 4XJGUBTZODBXBJUݚڀಡຊ ԁ IUUQTTXJGUCPPUIQN

Slide 4

Slide 4 text

͞Βʹࠓ݄৽͘͠ެ։͠·ͨ͠ʂ 3Y4XJGUݚڀಡຊᶗ ԁ IUUQTTXJGUCPPUIQN 3FDZDMFE"MVNJOJVN

Slide 5

Slide 5 text

ຊ୊

Slide 6

Slide 6 text

3Yͷҟৗऴྃͷݪଇ ˣ 0CTFSWBCMFγʔέϯεʹ Τϥʔྲྀ͞ΕΔͱͦΕҎ߱ ߪಡͰ͖ͳ͘ͳΔ ☓ ☓

Slide 7

Slide 7 text

ҟৗॲཧܥͷύλʔ ϯ͸৭ʑ ΤϥʔΛΩϟονͯ͠PO&SSPSͱͯ͠ྲྀ͞ͳ͍Α͏ʹ͢Δ w DBUDI&SSPS\^ͯ͠Τϥʔʹରॲ w 0CTFSWBCMF3FTVMUͳܕͰྲྀ͢ w ͜͜Ͱͷ3FTVMU͸੒൱ͱͦͷ৘ใΛؚΉFOVN 0CTFSWBCMFγʔέϯεΛ෼ذ͢Δ w 0CTFSWBCMF3FTVMUͳܕʹͨ͠΋ͷΛ͞Βʹͭͷγʔέϯεਖ਼ৗͱҟ ৗܥʹ෼ذ w ࢀߟϝϧΧϦΞοςͷ3Y4XJGU࣮૷ΨΠυIUUQTTQFBLFSEFDLDPNQBSBLFFUZ NFSVLBSJBUVUFGBMTFSYTXJGUTIJ[IVBOHHBJEP TMJEF

Slide 8

Slide 8 text

0CTFSWBCMFγʔέϯεΛ ਖ਼ৗܥͱΤϥʔͰ෼ذ͢Δͷ͸ 3Y4XJGUͷNBUFSJBMJ[F࢖͑͹ ָʹͰ͖·͢Αͱ͍͏ͷ͕ ࠓճͷ5JQT

Slide 9

Slide 9 text

☓ NBUFSJBMJ[F &WFOU &WFOU ☓ &WFOU 3YͷNBUFSJBMJ[F ϝιουͰΠϕϯτΛSFQSFTFOUͨ͠ 0CTFSWBCMF&WFOU5ͳγʔέϯεΛ৽ͨʹ࡞Δ

Slide 10

Slide 10 text

ਖ਼ৗܥͱҟৗܥͷΠϕϯτΛ औΓग़ͤΔΑ͏ͳϝιουΛ༻ҙ extension ObservableType where E: EventConvertible { public func elements() -> Observable { return filter { $0.event.element != nil } .map { $0.event.element! } } public func errors() -> Observable { return filter { $0.event.error != nil } .map { $0.event.error! } } } // 1. ObservableͷE͕EventConvertible४ڌͰ͋Ε͹࢖͑ΔΑ͏ʹͳΔ // ྫ͑͹ Observable> ͱ͔ // 2_1. Πϕϯτͷਖ਼ৗܥelementͷΈΛฦ͢Α͏ʹ͢Δ͚ͩ // 2_2. ΠϕϯτͷΤϥʔͷΈΛฦ͢Α͏ʹ͢Δ͚ͩ

Slide 11

Slide 11 text

ར༻ྫ

Slide 12

Slide 12 text

let result = Observable.of(1, 2) .flatMap { _ -> Observable> in let observable = Observable.create { observer in observer.onNext("A") observer.onError(TestError.test) observer.onNext(“B") observer.onCompleted() return Disposables.create() } return observable.materialize() } output1 = result .elements() .subscribe(onNext: { print("elements, onNext: \($0)”) }, onError: { print("elements, onError: \($0)") },) error = result .errors() .subscribe(onNext: { print("errors, onNext: \($0)") }, onError: { print("errors, onError: \($0)") }) —— ग़ྗ —— elements, onNext: A elements, onNext: A elements, onCompleted: errors, onNext: test errors, onNext: test errors, onCompleted:

Slide 13

Slide 13 text

ͱ͍͏͜ͱͰ FMFNFOUT ͱFSSPST ϝιουΛFYUFOTJPOʹ͠ ର৅ͷ0CTFSWBCMFγʔέϯεʹ NBUFSJBMJ[F ͢Δ͚ͩͰ FSSPSͷγʔέϯε͕෼ذͰ͖Δʜ

Slide 14

Slide 14 text

7JFX.PEFM MFUPVUQVU%SJWFS#PPM MFUFSSPS%SJWFS&SSPS ͔͠͠ &SSPSܕͬͯΧόʔൣғ޿͗͢ΔͷͰ͸ʁ ࣗલͰΤϥʔ෼ذͯ͠ΔΜ͔ͩΒܕΛ੍ݶ͢Ε͹͍͍ͷʹ

Slide 15

Slide 15 text

ྫಛఆͷΤϥʔʹ͢Δ let error: Observable = result .errors() .map { guard let error = $0 as? OAuthSwiftError else { // ͜͜ͰΫϥογϡϨϙʔτૹΓͭͭ …. fatalError($0.localizedDescription) } return error } .share(replay: 1) w Ͱ͖Δ͚Ͳ΋ʜ w ΍Δඞཁ͕͋ΔͱࢥͬͨΒ΍ͬͨΒΑΖͦ͠͏ w .PEFM૚ͷԞਂ͘ͰಛఆͷΤϥʔͷΈΛ૝ఆ͍ͯ͠Δ৔߹ͳͲ w ͦ͜·Ͱ΍Δඞཁͳͦ͞͏ͱ൑அͰ͖Δͱ͖ w 7JFX.PEFMͷϓϨθϯςʔγϣϯϩδοΫͰ&SSPS൑ผ͢Ε͹͍ ͍ͱ͍͏৔߹ͳͲ

Slide 16

Slide 16 text

͔͠͠ࠔͬͨ͜ͱʹ

Slide 17

Slide 17 text

4JOHMF΍.BZCF $PNQMFUBCMFͰ͸ ͦͷ··Ͱ͸ NBUFSJBMJ[F͸࢖͑ͳ͍

Slide 18

Slide 18 text

1SPUPDPM 0CTFSWBCMF5ZQF NBUFSJBMJ[F 1SPUPDPM 1SJNJUJWF4FRVFODF5ZQF $MBTT 0CTFSWBCMF& 1SPUPDPM 0CTFSWBCMF$POWFSUJCMF5ZQF 4USVDU 1SJNJUJWF4FRVFODF5SBJU &MFNFOU 4JOHMFͳͲ

Slide 19

Slide 19 text

4JOHMFͰNBUFSJBMJ[FΛ࢖͍͍ͨ৔߹ BT0CTFSWBCMF NFUFSJBMJ[F

Slide 20

Slide 20 text

ྫ͑͹4JOHMFΛฦ͢ΠϯλϑΣʔε͕ ͋ͬͨͱͯ͠ ͦ͏͍͏΋ͷ͸ BT0CTFSWBCMF NFUFSJBMJ[F ͢Δ͜ͱʹΑͬͯ 0CTFSWBCMF&WFOU3FTQPOTF ͱͳΔ func request(_ param: RequestParam) -> Single {}

Slide 21

Slide 21 text

ͦ΋ͦ΋ ͳͥ͜ͷ෼ذํ๏ʹ ؾ͍͔ͮͨ

Slide 22

Slide 22 text

3Y4XJGU&YU IUUQTHJUIVCDPN3Y4XJGU$PNNVOJUZ3Y4XJGU&YU w FMFNFOUT FSSPST w VOXSBQ w JHOPSF @WBMVFT5P*HOPSF&ʜ w OPU w pMUFS.BQ\^ FUD

Slide 23

Slide 23 text

IUUQTHJUIVCDPN3FBDUJWF93Y4XJGUQVMM 3Y4XJGU ͦ΋ͦ΋ઌʹ3Y4XJGU&YUͰNBUFSJBMJ[F͕࣮૷͞Ε ͦΕ͕3Y4XJGUʹऔΓࠐ·Εͨ

Slide 24

Slide 24 text

·ͱΊ w ΤϥʔΛ෼ذ͍ͨ͠ͱ͖͸0CTFSWBCMF&WFOU5 w NBUFSJBMJ[F ݺ΂͹ˢʹͳΔ w &WFOUͷpMUFSͱNBQ͢ΔϝιουͰͭʹ෼ذ w &SSPSΛ೚ҙͷ&SSPSʹͰ͖ΔͷͰ΍ͬͯ΋͍͍ w NBUFSJBMJ[F ͸0CTFSWBCMF5ZQFʹ͔࣮͠૷͞Ε͍ͯͳ͍ ͷͰ4JOHMF .BZCF $PNQMFUFEͳͲͰ͸࢖͑ͳ͍

Slide 25

Slide 25 text

Ҏ্Ͱ͢ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠