Slide 1

Slide 1 text

RxSwift x APIKit

Slide 2

Slide 2 text

About me 4 Ӊࠤݟ ެี (@usamik26) 4 ϑΣϯϦϧגࣜձࣾ 4 iOS ΞϓϦΤϯδχΞ

Slide 3

Slide 3 text

ࠓճͷ಺༰ 4 ࠷ۙ RxSwift ਪ͠ 4 APIKit ΋࢖ͬͯΔ 4 ૊Έ߹Θͤͯ࢖͏ͱ͍͍Α

Slide 4

Slide 4 text

ؔ࿈ : ҎલͷؔϞόͰൃදͨ͠಺༰

Slide 5

Slide 5 text

ؔ࿈ : Realm meetup Ͱൃදͨ͠಺༰

Slide 6

Slide 6 text

RxSwift ͱ͸

Slide 7

Slide 7 text

RxSwift ͱ͸ 4 Reactive Programming ͷͨΊͷϥΠϒϥϦ 4 ReacticeX ϑΝϛϦʔ 4 Rx.NET / RxJS / RxJava / ...

Slide 8

Slide 8 text

ྫɿΠϕϯτॲཧ button.rx_tap .subscribeNext { _ in // Ϙλϯ͕λοϓ͞Εͨͱ͖ͷॲཧ } .addDisposableTo(disposeBag)

Slide 9

Slide 9 text

ྫɿඇಉظॲཧ URLSession.rx_response(request) .subscribeOn(sessionScheduler) .map { (data, response) in // όοΫάϥ΢ϯυॲཧ } .observeOn(mainScheduler) .map { data in // UIॲཧ }

Slide 10

Slide 10 text

APIKit ͱ͸

Slide 11

Slide 11 text

APIKit ͱ͸ 4 Web API ௨৴ͷͨΊͷϥΠϒϥϦ 4 Swift Λੜ͔ͯ͠؆ܿʹ࣮૷Ͱ͖Δ

Slide 12

Slide 12 text

API ΫϥΠΞϯτ࣮૷ଆͷίʔυ protocol HogeAPIRequest: Request {} extension HogeAPIRequest { var baseURL: NSURL { return NSURL(...) } } struct HogeAPI { struct HogeRequest: HogeAPIRequest { typealias Response = HogeResponse } struct HogeResponse { ... } }

Slide 13

Slide 13 text

API ΫϥΠΞϯτར༻ଆͷίʔυ let request = HogeAPI.HogeRequest(...) API.sendRequest(request) { result in switch result { case .Failure(let error): // ࣦഊ࣌ͷॲཧ case .Success(let response): // ੒ޭ࣌ͷॲཧ } }

Slide 14

Slide 14 text

RxSwift x APIKit

Slide 15

Slide 15 text

APIKit Λ Rx ʹରԠ͍ͤͨ͞ 4 NSURLSession ͷ rx_response ͷϊϦͰ

Slide 16

Slide 16 text

NSURLSession ͷ࣮૷Λࢀর͢Δ func rx_response(request: NSURLRequest) -> Observable { return create { observer in // request Λૹ৴ͯ͠ϨεϙϯεΛड͚औΔ if ࣦഊ { observer.on(.Error(error)) } else { observer.on(.Next(data, response)) observer.on(.Completed) } return AnonymousDisposable { /* Ωϟϯηϧॲཧ */ } } }

Slide 17

Slide 17 text

APIKit ൛ func responseFrom(request: T) -> Observable { return create { (observer: ObserverOf) in API.sendRequest(request) { result in switch result { case .Failure(let error): observer.on(.Error(error)) case .Success(let response): observer.on(.Next(response)) observer.on(.Completed) } } return AnonymousDisposable { API.cancelRequest(T) } } }

Slide 18

Slide 18 text

࢖͍ํ let request = HogeAPI.HogeRequest(...) HogeAPI.responseFrom(request) .subscribeOn(sessionScheduler) .map { (data, response) in // όοΫάϥ΢ϯυॲཧ } .observeOn(mainScheduler) .map { data in // UIॲཧ }

Slide 19

Slide 19 text

;Γ͔͑Γ 4 ؆୯ʹ࣮૷Ͱ͖ͨ 4 ศར 4 ͋ΕɺResult ܕͷҙຯ͸ʁ 4 Rx ͷ࣮૷ͷதͰ͔͠࢖ΘΕͳ͘ͳ͚ͬͨͲɾɾɾ 4 ΤϥʔϋϯυϦϯά͸ RxSwift Ͱ΍Ε͹͍͍