Slide 1

Slide 1 text

5෼ͰReactiveCocoa TechLT๨೥ձ2015

Slide 2

Slide 2 text

• Le Van Nghia (ΪΞ) • @nghialv (twitter: nghialv2607) ΞΧ΢ϯτ • CyberAgentʹ৽ଔೖࣾ • FRESH!ੜ์ૹ , AmebaΞϓϦ

Slide 3

Slide 3 text

“2015೥΋ٕज़తʹมԽͷଟ͍1೥Ͱͨ͠Ͷ” Πϕϯτ֓ཁΑΓ

Slide 4

Slide 4 text

ٕज़ؔ܎ͳ͍Ͱ͕͢ɼCyberAgentͷϩΰ΋มԽ͞Ε·ͨ͠ɻ

Slide 5

Slide 5 text

http://abema.tv https://amebafresh.tv Coming Soon!

Slide 6

Slide 6 text

• ϓϩδΣΫτϝϯόʔ໿30໊ • αʔόʔ & Πϯϑϥ x 6 • Go 1.5.2, Docker 1.9.0, AWS, Microservices, RESTful API (goji) • ϑϩϯτ x 6 • Node.js v4, TypeScript 1.6, React/Flux, SPA + SSR • iOS x 4 • Swift 2.1, ReactiveCocoa, MVVM • Android x 4 • Kotlin, Rx • σβΠφʔ x 3 • Sketch • πʔϧ • Slack + Hubot(ChatOps), Github Enterprise, CircleCI (Enterprise), Fabric, JIRA Agile, Mackerel…

Slide 7

Slide 7 text

speakerdeck.com/stormcat24/next-fresh-applications-with-amazon-ecs ࢁా͞Μ @stormcat24

Slide 8

Slide 8 text

2015೥ͷiOS։ൃ WWDC 2014 1.0 - closure, first-class functions - type safety and type inference - generics - tuples and multiple return values - seamless access to Objective C, C, C++ 2/2015 1.2 - incremental builds - faster executables - better compiler diagnostics - stability improvements 9/2015 2.0 - error handling model - guard, defer - protocol extension - protocol-oriented programming - ίϯύΠϧ࣌ؒ - ίϯύΠϥͷόά AmebaΞϓϦ FRESH!ੜ์ૹ - ReactiveCocoa - MVVMϞσϧ 1.0ಋೖ - ίϯύΠϧ࣌ؒ - ֎෦ϥΠϒϥϦͷෆ҆ఆ ίʔυ͕ଟ͘ͳͬͨ࣌఺ - 100% Swift 1.2 - MVCϞσϧ - Future - Result

Slide 9

Slide 9 text

2015೥ͷiOS։ൃ 12/2015 Open source - source code - swift package manager - core libraries - ports for Linux Fall 2016 3.0 FRESH!ੜ์ૹ - Swift2.0ʹҠಈ - ίϯύΠϧ͸΍͘ͳͬͨ

Slide 10

Slide 10 text

ReactiveCocoaͷλΠϜ

Slide 11

Slide 11 text

ReactiveCocoa (RAC) is a Cocoa framework inspired by Functional Reactive Programming. It provides APIs for composing and transforming streams of values over time.

Slide 12

Slide 12 text

ReactiveCocoa (RAC) is a Cocoa framework inspired by Functional Reactive Programming. It provides APIs for composing and transforming streams of values over time.

Slide 13

Slide 13 text

ReactiveCocoa (RAC) is a Cocoa framework inspired by Functional Reactive Programming. It provides APIs for composing and transforming streams of values over time.

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

water pipe event pipe

Slide 16

Slide 16 text

event signal observe sink

Slide 17

Slide 17 text

event signal observe sink let (signal, sink) = Signal.pipe() signal
 .observe { event in // hi } sink.sendNext("hi")

Slide 18

Slide 18 text

event signal observe sink observe let (signal, sink) = Signal.pipe() signal
 .observe { event in // hi } sink.sendNext("hi") signal
 .observe { event in // hi }

Slide 19

Slide 19 text

event signal observe sink observe observe͢ΔલͷeventΛड͚औΕͳ͍

Slide 20

Slide 20 text

ReactiveCocoa (RAC) is a Cocoa framework inspired by Functional Reactive Programming. It provides APIs for composing and transforming streams of values over time.

Slide 21

Slide 21 text

event signal observe sink transform

Slide 22

Slide 22 text

event signal observe sink let (signal, sink) = Signal.pipe() signal
 .map { string in string.uppercaseString } .observe { event in // “HI" } sink.sendNext("hi") transform hi HI

Slide 23

Slide 23 text

event observe sink

Slide 24

Slide 24 text

throttle event signal observe sink throttle let (signal, sink) = Signal.pipe() signal .throttle(0.5, onScheduler: QueueScheduler()) .observe { num in // 1 // 4 } sink.sendNext(1) sink.sendNext(2) sink.sendNext(3) // after 0.5 second sink.sendNext(4)

Slide 25

Slide 25 text

combinePrevious let (signal, sink) = Signal.pipe() signal .combinePrevious(0) .observe { pre, cur in // pre = 0, cur = 1 // pre = 1, cur = 2 } sink.sendNext(1) sink.sendNext(2)

Slide 26

Slide 26 text

Transforming • map • filter • reduce • collect • mapError • observeOn • ignoreNil • timeoutWithError • take • delay • skip • takeUntil • combinePrevious • takeLast • throttle • promoteErrors

Slide 27

Slide 27 text

ReactiveCocoa (RAC) is a Cocoa framework inspired by Functional Reactive Programming. It provides APIs for composing and transforming streams of values over time.

Slide 29

Slide 29 text

Signal, TransformΛ૊Έ߹Θͤͯɼ
 ผͷSignalΛߏ੒Ͱ͖Δ

Slide 30

Slide 30 text

event signal observe sink transform transform ࿈ଓͰTransformΛ૊Έ߹ΘͤΔ

Slide 31

Slide 31 text

observe ෳ਺SignalΛ૊Έ߹ΘͤΔ

Slide 32

Slide 32 text

͜Ε΋Ͱ͖ΔΑʂ

Slide 33

Slide 33 text

zip let (numbersSignal, numbersSink) = Signal.pipe() let (lettersSignal, lettersSink) = Signal.pipe() let newSignal = zip(numbersSignal, lettersSignal) newSignal .observe { event in
 println(event)
 } numbersSink.sendNext(1) // nothing printed lettersSink.sendNext("A") // prints (1, A) numbersSink.sendNext(2) // nothing printed lettersSink.sendNext("B") // prints (1, B) lettersSink.sendNext("C") // nothing printed lettersSink.sendNext("D") // nothing printed

Slide 34

Slide 34 text

Ͳͷͱ͜Ζʹ࢖͑Δ?

Slide 35

Slide 35 text

• શ෦ • Model • ViewModel • View • Manager • Api • …

Slide 36

Slide 36 text

͝ࢹௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ