RxSwift reintroduction
by
USAMI Kosuke
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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 !