Slide 1

Slide 1 text

RxSwiftͱ༇շͳ஥ؒͨͪ Gotanda.mobile #1 in Mobile Factory on 2016/05/20 ϛώϟΤϧ@mihyaeru21

Slide 2

Slide 2 text

͓·͑୭Α • ϛώϟΤϧ @mihyaeru21 • ࠷ۙͷݴޠɿSwift/Kotlin/Perl • ·ͩ·ͩϋϯλʔ • ϞφυΛཧղ͍ͨ͠

Slide 3

Slide 3 text

RxSwit

Slide 4

Slide 4 text

Unit

Slide 5

Slide 5 text

Unit • Driver • Variable • ControlEvent/ControlProperty

Slide 6

Slide 6 text

Unit • RxCocoa͕ఏڙ͢Δศར͘Μ • ෺ཧͱ͔ͷ୯Ґͱͯ͠ͷUnitʹ͔͚͍ͯΔΒ͍͠ ※RxCocoaʹؚ·ΕΔͱެࣜυΩϡϝϯτʹ͋Δ͚ͲVariable͸RxSwiftʹؚ·ΕΔ

Slide 7

Slide 7 text

Driver

Slide 8

Slide 8 text

Driver • Τϥʔ͕ྲྀΕͳ͍ • observe on ϝΠϯεϨου • share͞ΕΔ • (ਖ਼֬ʹ͸ shareReplayLatestWhileConnected )

Slide 9

Slide 9 text

Driver • ϞσϧͱUIͷؒʹೖͬͨΓ • UIͱUIΛܨ͍ͩΓ • ϋʔυ΢ΣΞͷυϥΠόιϑτ΢ΣΞతͳͱ͜Ζ͔Β
 ໊෇͚ΒΕͨ

Slide 10

Slide 10 text

Driver fetchUser() .map { $0.name } .observeOn(MainScheduler.instance) .bindTo(label.rx_text)

Slide 11

Slide 11 text

Driver fetchUser() .map { $0.name } .observeOn(MainScheduler.instance) .bindTo(label.rx_text) όοΫάϥ΢ϯυͰσʔλΛऔͬͯ͘Δ UIͷߋ৽͸ϝΠϯεϨουඞਢ ϥϕϧͷςΩετʹόΠϯυ͢Δ

Slide 12

Slide 12 text

Driver fetchUser() .map { $0.name } .asDriver(onErrorJustReturn: "") .drive(label.rx_text)

Slide 13

Slide 13 text

Driver fetchUser() .map { $0.name } .asDriver(onErrorJustReturn: "") .drive(label.rx_text) Driverʹม׵ ϥϕϧͷςΩετʹόΠϯυ͢Δ

Slide 14

Slide 14 text

Driver let userName = fetchUser() .map { $0.name } .observeOn(MainScheduler.instance) userName.bindTo(label.rx_text) userName.bindTo(otherLabel.rx_text)

Slide 15

Slide 15 text

Driver let userName = fetchUser() .map { $0.name } .observeOn(MainScheduler.instance) .share() userName.bindTo(label.rx_text) userName.bindTo(otherLabel.rx_text) share()͠ͳ͍ͱ2ճൃՐ͢Δ

Slide 16

Slide 16 text

Driver let userName = fetchUser() .map { $0.name } .asDriver(onErrorJustReturn: "") userName.drive(label.rx_text) userName.drive(otherLabel.rx_text)

Slide 17

Slide 17 text

Driver let userName = fetchUser() .map { $0.name } .asDriver(onErrorJustReturn: "") userName.drive(label.rx_text) userName.drive(otherLabel.rx_text) share()తͳ͜ͱΛ͍ͯ͠Δ͔ΒൃՐ͸1ճͷΈ

Slide 18

Slide 18 text

Driver • ʮͦΕɺObservableͰ΋Ͱ͖ͯΔ͡ΌΜʯ • ͸͍

Slide 19

Slide 19 text

Driver • UIͱܨ͙ҙਤΛ໌֬ʹ͢Δ • ҆શ౓ΛߴΊΔ • Driverʹม׵ޙ͸observeεϨουͷมߋ͸Ͱ͖ͳ͍ • share()ͯ͘͠ΕΔ

Slide 20

Slide 20 text

Variable

Slide 21

Slide 21 text

Variable • Τϥʔ͕ྲྀΕͳ͍ • share͞ΕΔ

Slide 22

Slide 22 text

Variable • BehaviorSubjectͷWrapper • valueϓϩύςΟΛ௨ͯ͠࠷৽ͷ஋ʹΞΫηεͰ͖Δ • valueϓϩύςΟ΁ͷ୅ೖ͸on(.Next)ͱͯ͠ྲྀΕΔ • ObservableʹͳΔ͚ͲObserverʹ͸ͳΒͳ͍ • ஋Λྲྀͨ͢Ίʹ͸valueΛඞͣܦ༝͢Δ

Slide 23

Slide 23 text

Variable let variable = Variable(0) variable .asDriver() .map { "value: \($0)" } .drive(label.rx_text) variable.value = 99 print("variable.value = \(variable.value)")

Slide 24

Slide 24 text

Variable let variable = Variable(0) variable .asDriver() .map { "value: \($0)" } .drive(label.rx_text) variable.value = 99 print("variable.value = \(variable.value)") label.text͕”value: 99”ʹͳΔ Variable͸ΤϥʔΛྲྀ͞ͳ͍͔Β Ҿ਺ແ͠൛ͷasDriver()͕͋Δ ಉظతʹ஋ΛऔಘͰ͖Δ

Slide 25

Slide 25 text

ControlEvent ControlProperty

Slide 26

Slide 26 text

ControlEvent/ControlProperty • Τϥʔ͕ྲྀΕͳ͍ • subscribe on ϝΠϯεϨου • observe on ϝΠϯεϨου • share͞ΕΔ

Slide 27

Slide 27 text

ControlEvent/ControlProperty • UIύʔπͷΠϕϯτΛRxͱͭͳ͗ࠐΈ΍͘͢ • ControlEvent • Observable • ControlProperty • Observable / Observer • Observer΋͋Δ

Slide 28

Slide 28 text

ControlEvent/ControlProperty textField.rx_text .asDriver() .drive(label.rx_text) ControlProperty Observer ControlProperty͸ΤϥʔΛྲྀ͞ͳ͍͔Β Ҿ਺ແ͠൛ͷasDriver()͕͋Δ

Slide 29

Slide 29 text

ControlEvent/ControlProperty textField.rx_text .bindTo(label.rx_text) ControlPropertyͷΠϕϯτ͸ϝΠϯεϨουͰྲྀΕΔ

Slide 30

Slide 30 text

ControlEvent/ControlProperty button.rx_tap .asDriver() .map { "tapped!" } .drive(textField.rx_text) ControlEvent΋ΤϥʔΛྲྀ͞ͳ͍͔Β Ҿ਺ແ͠൛ͷasDriver()͕͋Δ ControlEvent ControlProperty

Slide 31

Slide 31 text

ControlEvent/ControlProperty • Cocoaͷ͍ΖΜͳ΍ͭʹ rx_* ͕ੜ͍͑ͯͯΖ͍Ζศར • https://github.com/ReactiveX/RxSwift/blob/master/ Documentation/API.md

Slide 32

Slide 32 text

౜ಥͳ·ͱΊ • ศརػೳͨͪ • Driver • Variable • ControlEvent/ControlProperty • ͳͯ͘΋ࢮͳͳ͍͚Ͳ͋Δͱ஍ຯʹศར • ஍ຯʹ࢖ͬͯ͜