Slide 1

Slide 1 text

RxSwift Observable ͷ࡞Γํ USAMI Kosuke (Fenrir Inc.)

Slide 2

Slide 2 text

RxSwift 3 released » For Swift 3 » ಛʹɺ໋໊ϧʔϧ͕େ෯ʹมΘ͍ͬͯΔ » Swift 2 ܥͰ͸ RxSwift 2 ܥΛ࢖͏

Slide 3

Slide 3 text

RxSwift ͓͞Β͍

Slide 4

Slide 4 text

Observable ͱ͸ » ҎԼͷ3छྨͷ΋ͷ͕ྲྀΕͯ͘ΔඇಉظετϦʔϜ » .next(Element) » .error(Error)ʢετϦʔϜऴྃʣ » .completedʢετϦʔϜऴྃʣ

Slide 5

Slide 5 text

Observable Λ࢖͏ : جຊܗ hogeObservable .subscribe(onNext: { element in print(element) }) .addDisposableTo(disposeBag)

Slide 6

Slide 6 text

Observable Λ࢖͏ : Operator hogeObservable .catchError { ... } .filter { ... } .map { ... } ...

Slide 7

Slide 7 text

ΑΓৄ͘͠͸ҎԼ͕Φεεϝ » Rx.playground » RxExample.xcodeproj » RxSwift ϦϙδτϦʹ͋Δ

Slide 8

Slide 8 text

༻ҙ͞Ε͍ͯΔ Observable » UI ύʔπͷ Observable ͸͍͍ͩͨ༻ҙ͞Ε͍ͯΔ » UIButton.rx.tap » UITextField.rx.text » UILabel.rx.text

Slide 9

Slide 9 text

୯७ʹΠϕϯτΛྲྀ͢ Observable let variable = Variable("1") variable.value = "2" variable.value = "3" let subject = PublishSubject() subject.onNext("A") subject.onNext("B")

Slide 10

Slide 10 text

ͦΕҎ֎ͷ Observable ͸ʁ » ඞཁʹԠͯࣗ͡෼Ͱ༻ҙ͢Δ

Slide 11

Slide 11 text

Observable Λ࡞Δ

Slide 12

Slide 12 text

Observable.create() let hoge = Observable.create { observer in observer.on(.next("hoge")) observer.on(.completed) return Disposables.create() }

Slide 13

Slide 13 text

ϙΠϯτ (1) ΤϥʔΛૹΖ͏ » Observable ͷྑ͞Λੜ͔͢ » ੒ޭ࣌ʹ͸݁Ռ͚ͩʢnextʣɺࣦഊ࣌ʹ͸Τϥʔ͚ͩʢerrorʣ » ݁ՌͱΤϥʔ͕྆ํฦΔ͜ͱ͸ͳ͍ͱ͍͏อূ » ΤϥʔΛࣺͯΔͷ͸ Observer ଆͷ࢓ࣄ

Slide 14

Slide 14 text

ϙΠϯτ (1) ΤϥʔΛૹΖ͏ let hoge = Observable.create { [unowned self] observer in do { let result = try self.hogehoge() observer.on(.next(result)) observer.on(.completed) } catch let error { observer.on(.error(error)) } return Disposables.create() }

Slide 15

Slide 15 text

ϙΠϯτ (2) ΩϟϯηϧՄೳʹ͠Α͏ » Observable ͷ؂ࢹʢsubscribeʣΛ΍ΊΔʢdisposeʣ৔߹ͷରॲ » dispose ͞Εͨ࣌ͷΩϟϯηϧॲཧ͸ Observable ଆͷ࢓ࣄ

Slide 16

Slide 16 text

ϙΠϯτ (2) ΩϟϯηϧՄೳʹ͠Α͏ let hoge = Observable.create { [unowned self] observer in let task = self.dataTaskWithRequest(request) { ... } task.resume() return Disposables.create { task.cancel() // dispose ࣌ʹ͕࣮͜͜ߦ͞ΕΔ } }

Slide 17

Slide 17 text

Ԡ༻ : ΩϟϯηϧϙΠϯτΛ࡞Δ let hoge = Observable.create { [unowned self] observer in self.scheduler.schedule(()) { _ in hogeTask1() // ͜͜ͰΩϟϯηϧͰ͖ΔΑ͏ʹ͍ͨ͠ hogeTask2() } return Disposables.create { ??? } }

Slide 18

Slide 18 text

Ԡ༻ : ΩϟϯηϧϙΠϯτΛ࡞Δ let hoge = Observable.create { [unowned self] observer in let cancelDisposable = BooleanDisposable() let disposable = self.scheduler.schedule(()) { _ in hogeTask1() if cancelDisposable.disposed == true { return } hogeTask2() } return CompositeDisposable(disposable, cancelDisposable) }

Slide 19

Slide 19 text

Observable Λ࡞Δʹ͸ » Ҏ্ͷ͜ͱΛԡ͓͚͑ͯ͞͹͍͍Μ͡Όͳ͍Ͱ͠ΐ͏͔

Slide 20

Slide 20 text

Observable Λ࡞Δͱ͸ » Non Rx ͳੈքΛ Rx ͳੈքʹ͢Δ » Observable ͕࡞ΕΔͱɺͳΜͰ΋ Rx ʹͰ͖Δ