Slide 1

Slide 1 text

Promise͔ΒReactive΁ͷҠߦΛ໛ࡧ͢Δ Gotanda.mobile #2 @horimislime 1

Slide 2

Slide 2 text

self • @horimislime • גࣜձࣾτϨλ @ޒ൓ాTOC • ҿ৯ళ޲͚iPad୆ாΞϓϦΛ։ൃͯ͠·͢ 2

Slide 3

Slide 3 text

͓࿩ • PromiseͰඇಉظϓϩάϥϛϯά͍ͯ͠Δ/͠Α͏ͱ͍ͯ͠Δਓ ʹ΋ReactiveΛΦεεϝ͢Δ࿩ • ๭ࣾͷΞϓϦͰͷࣄྫΛఴ͑ͯ 3

Slide 4

Slide 4 text

Objective-Cࢿ࢈ͷ͋ΔΞϓϦ • BoltsFrameworkʹΑΔPromise • APIClient͕BoltsͷTaskΛฦ͢ • ্Ґ૚Ͱ΋޿ൣғʹBoltsʹґଘ 4

Slide 5

Slide 5 text

ͦͯ͠SwiftҠߦظ΁ • Bolts͸AnyObject͕ฦ͖ͬͯͯπϥ͍ • SwiftyͳPromiseͷඞཁੑ • ͦͷޙ৭ʑ͋ͬͯҎԼʹґଘ͍ͯ͠Δ • Bolts-Objc • SwiftTask • Bolts-Swift 5

Slide 6

Slide 6 text

PromiseͰͷ՝୊ײ • ଟ͘ͷ΋ͷͰErrorͷܕࢦఆ͕Ͱ͖ͳ͍ࣄ΁ͷෆຬ • ϝϯςφϯε͕׆ൃͰͳ͍΋ͷ͕ग़͖ͯͭͭ͋Δ 6

Slide 7

Slide 7 text

enum AppError: Error { case offline case network } get(userId: 1234).then { user in ... }.catch { error in // ! switch error as! AppError { ... } } 7

Slide 8

Slide 8 text

ɹɹɹ ݁Ռͷܕࢦఆ Errorͷܕࢦఆ Swift3 Bolts-Swift ✅ ❌ ✅ PromiseKit ✅ ❌ ✅ SwiftTask ✅ ✅ ❌(branch༗) 8

Slide 9

Slide 9 text

Reactiveͷػӡ • SwiftҠߦͱڞʹSwiftBondΛ࢖͍࢝Ίͯͨ • ReactiveKitͱ͍͏฼ମʹґଘ • PromiseͰ΍Γ͍ͨࣄ͸େମͰ͖Δ 9

Slide 10

Slide 10 text

Promise෩ຯͳReactiveKit findPrinter() .flatMapLatesst { printer in return send(document, to: printer) }.flatMapLatest { result in return process(result) }.observe { event in switch event { case .completed: Progress.dismiss() case .failed(let error): switch error { case .network: Progress.showError("Network error!") ... } } } 10

Slide 11

Slide 11 text

ϝϦοτ • ͦΜͳʹҧ࿨ײ΋ͳ͍͠ɺbinding͚ͩͰͳ͘ඇಉظॲཧָ͕ • طʹView bindingΛ࢖͍ͬͯΕ͹਌࿨ੑ˕ • ௕ظతͳϝϯςφϯε΁ͷظ଴ 11

Slide 12

Slide 12 text

ಋೖͷোน • Reactiveͷֶशίετ΁ͷݒ೦ • ͜ͷ1೥͘Β͍ͰσϑΝΫτԽͨ͠ײ͕͋Δ • View Bindingʹ࢖͏ͳΒશମతʹReactiveԽͨ͠ํ͕౎߹ ͕ྑ͍͜ͱ΋ଟ͍ 12

Slide 13

Slide 13 text

ߟ͓͑ͯ͘΂͖ࣄ • Promise / Rxؔ࿈͸ෳ਺ϨΠϠͰ࢖༻͕ͪ͠ • Լखʹબ୒͢Δͱ๲େͳҠߦίετͰࢮ͵ • ࠷΋কདྷੑΛߟྀ͢Δ΂͖ॴ 13

Slide 14

Slide 14 text

·ͱΊ • SwiftΛऔΓר͘Promiseࣄ৘ • Reactiveͷোน͸ݮͬͯΔ͠ಋೖͷνϟϯε ! • ٕͨͩ͠ज़બఆ͸৻ॏʹ 14