Slide 1

Slide 1 text

RxSwift ࠶ೖ໳ USAMI Kosuke Fenrir Inc.

Slide 2

Slide 2 text

RxSwift ͱ͸

Slide 3

Slide 3 text

RxSwift ͱ͸ • ඇಉظͷΠϕϯτΛड͚औΔͨΊͷ࿮૊Έ • UI Πϕϯτड͚औΓ • Web API Ϩεϙϯεड͚औΓ • σʔλͷมԽͷ؂ࢹ

Slide 4

Slide 4 text

ίʔυྫ : UIButton button.rx.tap .subscribe { [unowned self] _ in // Ϙλϯλοϓ࣌ͷॲཧ } .disposed(by: disposeBag)

Slide 5

Slide 5 text

ίʔυྫ : UITextField textField.rx.text .subscribe { [unowned self] _ in // ςΩετೖྗ࣌ͷॲཧ } .disposed(by: disposeBag)

Slide 6

Slide 6 text

ίʔυྫ : Notification NotificationCenter.default.rx.notification(..) .subscribe { [unowned self] _ in // ௨஌ड͚औΓ࣌ͷॲཧ } .disposed(by: disposeBag)

Slide 7

Slide 7 text

ίʔυྫ : URLSession session.rx.response(request) .catchError { // Τϥʔ࣌ͷॲཧ .subscribe { // Ϩεϙϯεड͚औΓ࣌ͷॲཧ } .disposed(by: disposeBag)

Slide 8

Slide 8 text

ΠϕϯτॲཧͷྲྀΕ • Observable ʹ Πϕϯτ͕ྲྀΕͯ͘Δ Sequence • rx.tap, rx.text, rx.notification, rx.response • Observable Λ subscribe ͢ΔͱΠϕϯτΛड͚औΕΔ • dispose ʹ subscription ͷഁغ

Slide 9

Slide 9 text

ิ଍ɿObservable ʹྲྀΕͯ͘Δ΋ͷ • ྲྀΕͯ͘ΔΠϕϯτ͸ enum Ͱఆٛ͞Ε͍ͯΔ • .next : ஋ • .error : Τϥʔऴྃ • .completed : ਖ਼ৗऴྃ

Slide 10

Slide 10 text

σʔλόΠϯσΟϯά

Slide 11

Slide 11 text

σʔλόΠϯσΟϯά • ྫ͑͹ɾɾɾ • Ϟσϧͷ஋ͷมԽΛ UI ʹ఻͍͑ͨ • UI ͷ஋ͷมԽΛϞσϧʹ఻͍͑ͨ • ͦͷͨΊͷखஈͱͯ͠ RxSwift ͕࢖͑Δ

Slide 12

Slide 12 text

σʔλόΠϯσΟϯάͷͨΊͷखஈ • BehaviorRelay / PublishRelay • Observable ͷҰछ • .next ͚͕ͩྲྀΕΔɺऴྃ͠ͳ͍

Slide 13

Slide 13 text

Relay ͷ࢖͍ํ : accept • accept Ͱ Relay ʹ .next ΠϕϯτΛૹΔ͜ͱ͕Ͱ͖Δ let relay = BehaviorRelay(value: "000") relay.accept("111") relay.accept("222")

Slide 14

Slide 14 text

Relay ͷ࢖͍ํ : bind • subscribe ͷ୅ΘΓʹ bind ͕࢖͑Δ relay .bind(to: label.rx.text) textField.rx.text .bind(to: relay)

Slide 15

Slide 15 text

BehaviorRelay / PublishRelay • ྆ऀͷҧ͍ • ॳظ஋Λ࣋ͭ / ࣋ͨͳ͍ • value ϓϩύςΟͰݱࡏ஋͕औಘͰ͖Δ / Ͱ͖ͳ͍ • subscribe ͨ͠ͱ͖ݱࡏ஋͕ྲྀΕΔ / ྲྀΕͳ͍

Slide 16

Slide 16 text

ViewModel struct ViewModel { let username = BehaviorRelay(value: "") }

Slide 17

Slide 17 text

Ϟσϧͷ஋ͷมԽΛ఻͑Δ class ViewController { override func viewDidLoad() { viewModel.username .bind(to: label.rx.text) .disposed(by: disposeBag) } }

Slide 18

Slide 18 text

UI ͷ஋ͷมԽΛ఻͑Δ class ViewController { override func viewDidLoad() { textField.rx.text.orEmpty .bind(to: viewModel.username) .disposed(by: disposeBag) } }

Slide 19

Slide 19 text

όΠϯσΟϯάͷ޲͖

Slide 20

Slide 20 text

όΠϯσΟϯά͸୯ํ޲ • ʮόΠϯσΟϯάʯͱ͍͏ͱ૒ํ޲ͬΆ͍͚Ͳɾɾɾ • RxSwift ͷ৔߹͸୯ํ޲ • bind ͸࣮͸ subscribe Ͱ͋Δ͜ͱΛ஌Δͱ෼͔Γ΍͢ ͍

Slide 21

Slide 21 text

૒ํ޲όΠϯσΟϯά͸ผʹ͍Βͳ͍ • ૒ํ޲ͩͱσʔλͷྲྀΕͷ In / Out ͕۠ผͮ͠Β͍ • ΞϓϦઃܭͱͯ͠ɺσʔλͷྲྀΕΔํ޲ΛҙࣝͰ͖Δ͜ͱ͸େ ࣄ

Slide 22

Slide 22 text

RxSwift Λ࢖͏͏͑Ͱ ͷཹҙ఺

Slide 23

Slide 23 text

ͳΜͰ΋Ͱ͖͗͢Δ • ڧྗͳπʔϧͷͨΊແઅૢʹ࢖͏ͱ͜Μ͕Β͕Δ͜ͱ΋͋Δ • ΞϓϦઃܭΛߟ͓͑ͯ͘ • RxSwift ͕Կ͔ͷΞϓϦઃܭΛ༩͑ͯ͘ΕΔΘ͚Ͱ͸ͳ͍ • ΞϓϦઃܭʹରͯ͠ɺ࣮૷Λָʹ͢Δπʔϧ

Slide 24

Slide 24 text

ϥΠϒϥϦࣗମͷن໛͕େ͖͍ • ༷ʑͳΫϥε͕͋ͬͯ೺Ѳͮ͠Β͍ • খ͞ͳ໰୊Λղܾ͍͚ͨͩ͠ͳΒಋೖΛͨΊΒ͏৔߹΋

Slide 25

Slide 25 text

্खʹ෇͖߹͑͹ศར • ࢖͍Ͳ͜ΖΛͪΌΜͱߟ͑ͯ࢖͑͹ɺͱͯ΋ศར • Enjoy RxSwift !