RxSwift reintroduction
by
USAMI Kosuke
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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 !