68
USING FUTURES @daloog

Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

Embed Size (px)

Citation preview

Page 1: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

USING FUTURES

@daloog

Page 2: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

ABOUTskype: nobidon [email protected]

https://speakerdeck.com/dalog

Page 3: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

ASYNC VS

PARALLEL

Page 4: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

ASYNC

DO THINGS AT DEFERENT TIME

Page 5: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

PARALLEL

DO THINGS AT THE SAME TIME

Page 6: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

GCD

Page 7: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

GCD

Page 8: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

NSOPERATION

Page 9: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

NSOPERATION

Page 10: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

[ _ TARGET: ACTION: ]

Page 11: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

DELEGATE

Page 12: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

STRATEGY AND

CALLBACK

Page 13: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

BLOCK

Page 14: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

CALLBACK!!!

Page 15: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

SIGNATURE DANCE

Page 16: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"
Page 17: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"
Page 18: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"
Page 19: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"
Page 20: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"
Page 21: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"
Page 22: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"
Page 23: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"
Page 24: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"
Page 25: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"
Page 26: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

SEPARATE WORK FROM

RESULT DELIVERY

Page 27: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

SETTER

Page 28: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

T -> ()

Page 29: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

GETTER

Page 30: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

() -> T

Page 31: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

T -> U IS

(GET, SET) -> ()

Page 32: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

T -> U (() -> T, U -> ()) -> ()

Page 33: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

🙀💀

Page 34: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

ASYNC?

Page 35: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

ASYNC GETTER

Page 36: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

() -> T (T -> ()) -> ()

SET -> ()

Page 37: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

SET<T> -> ()

FUTURE<T>

Page 38: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

ASYNC SETTER

Page 39: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

T -> () () -> (T -> ())

() -> SET

Page 40: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

() -> SET<T>

PROMISE<T>

Page 41: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

GETTER +

SETTER =

STATE

Page 42: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

PROMISE +

FUTURE =

ASYNC STATE

Page 43: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

ASYNC STATE >>>

STATE

Page 44: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

WHY THIS IS SO HARD???

Page 45: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

ACTUALLY NOT

Page 46: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

THINK ABOUT FUTURE AS A BOX

Page 47: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

BOX WILL BE OPENED.

SOMEDAY. MAYBE.

Page 48: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

A = B C = A

Page 49: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

CHAIN?

Page 50: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

T -> U U -> K

T -> K

Page 51: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

T -> F<U> U -> F<K>

T -> F<K>

Page 52: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

(F<U> , U -> F<K>) ->

F<K>

Page 53: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

AND THEN

Page 54: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

FLAT MAP

Page 55: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

ERROR?

Page 56: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

TRY<T, E>

Page 57: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

FUTURE<T, E> =

FUTURE<TRY<T, E>>

Page 58: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

WHAT CAN BE FUTURE?

Page 59: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

ANYTHING

Page 60: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

UI

Page 61: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

USING FUTURES FOR REVERSING UI FLOW.

HTTPS://MEDIUM.COM/P/D3F5B7CA32D9/EDIT

Page 62: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

VM -> F<ACTION>

Page 63: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

NETWORK BLUETOOTH

Page 64: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

EXPOSE F<> AS PUBLIC API

Page 65: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

ALWAYS

Page 66: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

USE ANY LIB

• https://github.com/BoltsFramework/Bolts-iOS

• https://github.com/mxcl/PromiseKit

• https://github.com/Thomvis/BrightFutures

• https://realm.io/news/swift-summit-javier-soto-futures/

• https://realm.io/news/swift-tasks-nevyn-bengtsson/

Page 67: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

ALL LIBS EQUAL

ITS JUST ASYNC STATE

Page 68: Lviv MD Day 2015 Олексій Демедецький "Using Future for async flow application design"

FUTURE / PROMISE ASYNC GET/SET