Slide 1

Slide 1 text

The latest info of ReactiveSwift and ReactiveCocoa @ikesyo iOSDC Japan 2017 2017-09-16 Sat #iosdc

Slide 2

Slide 2 text

@ikesyo • ͍͚͠ΐʔʗ஑ా ᠳ • ͸ͯͳ@ژ౎ • https://twitter.com/ikesyo • https://github.com/ikesyo

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

RAC 5.0

Slide 6

Slide 6 text

RAC 5.0 • Repository Split • API Design • Signal • SignalProducer • Properties • Atomic • Others

Slide 7

Slide 7 text

Repository Split • ReactiveSwift: 2.0 • ReactiveCocoa: 6.0 • ReactiveObjC: 3.0 (Nullability Annotations, Lightweight Generics) • ReactiveObjCBridge: 2.0 (with RAS 2.0 and ReactiveObjC 3.0, Tuple Bridging)

Slide 8

Slide 8 text

RAS 2.0 & RAC 6.0

Slide 9

Slide 9 text

Signal • Safer Signal lifetime semantics: • #355 Revisit changes to the Signal lifetime semantics to improve tooling interoperability. • #463 Send interrupted when an input observer deinitializes. • Signal ʹΠϕϯτΛૹΓࠐΉinput observer͕อ࣋͞Εͳ͘ ͳͬͨΒ Signal ͕தஅʢഁغʣ͞ΕΔ • InstrumentsͰϝϞϦʔϦʔΫͱ൑அ͞Ε͍ͯͨՕॴΛղফ

Slide 10

Slide 10 text

SignalProducer • SignalProducer resource management: • #334 Lifetime-based producer resource management • Before: SignalProducer { observer, disposable in guard disposable.isDisposed else { return } ... if someCondition { disposable.dispose() // Not desirable } }

Slide 11

Slide 11 text

SignalProducer • SignalProducer resource management: • #334 Lifetime-based producer resource management • After: SignalProducer { observer, lifetime in guard lifetime.hasEnded else { return } ... if someCondition { observer.sendInterrupted() // Desirable } }

Slide 12

Slide 12 text

SignalProducer • Reduced overhead for all SignalProducer lifted operators: • #140 Less hops in operator lifting. • ಺෦࣮૷ͷมߋͰύϑΥʔϚϯεվળ

Slide 13

Slide 13 text

Properties • ValidatingProperty: • #182 Mutable Validating Property. • όϦσʔγϣϯՄೳͳՄมϓϩύςΟʔ

Slide 14

Slide 14 text

Disposables • SimpleDisposable and ActionDisposable has been folded into AnyDisposable: • #412 s/(ActionDisposable|SimpleDisposable)/ AnyDisposable/g • AnyDisposable ͷΠχγϟϥΠβʔҧ͍ʹ౷߹ AnyDisposable() // SimpleDisposable() AnyDisposable { ... } // ActionDisposable { ... }

Slide 15

Slide 15 text

Swift 3.2+ • Smart KeyPaths support: • #435 Overload map() to support key paths let signal: Signal let mapped = signal.map(\String.count) // Signal let mapped2 = signal.map { $0.count }

Slide 16

Slide 16 text

Swift 3.2+ • Smart KeyPaths support: • #440 BindingTarget + Smart Key Paths. let target: BindingTarget = BindingTarget( lifetime: lifetime, object: object, keyPath: \.value ) let property = MutableProperty(1) target <~ property // object.value == 1 property.value = 2 // object.value == 2

Slide 17

Slide 17 text

ReactiveCocoa • Foundation: Object Interception • Method Call Interception let appearing = viewController.reactive.trigger(for: #selector(UIViewController.viewWillAppear(_:))) • Object Lifetime object.reactive.lifetime.ended.observeCompleted(doCleanup) • Expressive, Safe Key Path Observation let producer = object.reactive.values(forKeyPath: #keyPath(key)) .take(during: self.reactive.lifetime) let property = DynamicProperty(object: person, keyPath: #keyPath(person.name))

Slide 18

Slide 18 text

ReactiveCocoa • AppKit & UIKit: UI bindings • UI Bindings: nameLabel.reactive.text <~ person.name • Controls and User Interactions preferences.allowsCookies <~ toggle.reactive.isOnValues textField.reactive.continuousTextValues.map { $0.characters.count } button.reactive.pressed = CocoaAction(viewModel.commit)

Slide 19

Slide 19 text

ReactiveCocoa • Smart KeyPaths support • #3489 Reactive key path subscript. label.reactive[\.text] <~ viewModel.title

Slide 20

Slide 20 text

And more...

Slide 21

Slide 21 text

! Happy Reactive Coding!! !

Slide 22

Slide 22 text

Thank you❗"