SlideShare a Scribd company logo
(Func&onal)+Reac&ve+Programming 
with%Reac*veCocoa 
Florent(Pillet 
fpillet@gmail.com 
@fpillet
Reac%ve!programming?
Reac%ve'programming'is'essen%ally 
working'with 
asynchronous*data*streams
Data!changes!over!$me!and!flows!in!streams! 
processed!with!an!asynchronous,!operator5 
based!logic.
They%are%all%separate,%yet%usually%found%at%the% 
same%place%in%the%code.
Build&modern,&highly&interac3ve,&dynamic& 
applica3ons 
with%minimal%pain.
Learning(curve(is(steep1 
Need$to$let$go$of$impera/ve$habits,$learn$new$abstrac/ons$and$ 
pa8erns 
but... 
1"If"you"read"only"one,"it"should"be"The"introduc6on"to"reac6ve"programming"you've"been"missing
Pays%off%big%+me 
Modular 
Reusable 
Expressive 
Testable(code
Reac%ve'programming'paves'the'way'to' 
elimina'ng)state)and)mutability'from'your' 
code.2 
2"Suggested"reading:"Enemy"of"the"state"presenta6on"by"Jus6n"Sparh9Summmers.
So#what#does#this#reac.ve#thing#look#like?
Signals
Signal of current GPS position (CLLocation) 
@100 @450 @300 @140 
time 
Signal of numerical values (NSNumber) 
@270 
Signal of boolean values (NSNumber) 
@YES @NO @YES
Signal of current GPS position (CLLocation) 
@100 @450 @300 @140 
time 
Signal of numerical values (NSNumber) 
@270 
Signal of boolean values (NSNumber) 
@YES @NO @YES 
Signals(send(events(over( 
&me 
A"signal"is"a"push,driven"stream. 
It#produces#three#types#of#events: 
• next"values 
• an"error 
• a"comple+on
next!values 
A"stream"of"values"delivered"over"0me. 
Signals(produce(zero,(one(or(many(next(values(before(either( 
comple*ng(or(producing(an(error. 
time 
Signal of current GPS position (CLLocation) 
next next next next next next
signal'comple'on 
time 
Signal with result of network request 
next completed
signal'error 
time 
Signal of network request emits error on request failure 
error 
(emits a NSError)
Opera&ons 
• A#signal#can#have#mul0ple#subscribers 
• Opera0ons#subcribe#to#a#signal#and#return#a#new#signal 
• Easy#mul0;staged#transforma0ons 
• Async,#async,#async!
map 
time 
Signal of current GPS position (CLLocation) 
B"="A.map(fn) 
@100 @270 
@450 @300 @140 
A 
B 
Signal of numerical values (NSNumber)
filter 
Signal of numerical values (NSNumber) 
@100 @270 
@450 @300 @140 
B"="A.filter(fn) 
@100 @140 
time 
A 
B
concat 
time 
A 
B 
C 
C"="A.concat(B)
merge 
time 
A 
B 
C 
C"="merge(A,B)
combineLatest 
time 
A 1 3 
B 
C 
6 7 8 
2 
C"="combineLatest(A,B) 
2 
6 
3 
6 
3 
7 
3 
8 
Signal of tuples
switchToLatest 
time 
D A C B 
E 
E"="D.switchToLatest() 
A 
B 
C
Other&opera*ons 
• flatten flattenMap zip zipWith startWith 
• delay throttle sample timeout 
• take takeUntil skip ignoreValues 
• try catch then switch if and or not 
• replay replayLast repeat retry 
..."and"a"lot"more"...
Reac%veCocoa
Main%classes%in%Reac+veCocoa 
• Signals:*RACSignal 
• Tuples:*RACTuple 
• Disposables:*RACDisposable 
• Schedulers:*RACScheduler 
• Commands:*RACCommand*(not*covered*here)
Subscribing*to*signals 
[someSignal subscribeNext:^(id nextValue) { 
// this is called asynchronously, every time a new value 
// is available on the signal 
NSLog(@"Signal emitted new value= %@", nextValue); 
}];
Subscribing*to*signals 
[someSignal subscribeNext:^(id nextValue) { 
NSLog(@"Signal emitted new value= %@", nextValue); 
} error:^(NSError *error) { 
NSLog(@"Signal emitted error %@", error); 
} completed:^{ 
NSLog(@"Signal completed"); 
}];
Unsubscribing*from*signals 
// subscribe 
RACDisposable *disposable = 
[someSignal subscribeNext:^(id nextValue) { 
NSLog(@"Signal emitted new value= %@", nextValue); 
}]; 
// can cancel subscription at any time 
[disposable dispose];
Crea%ng(signals 
• Using'KVO 
• Transforming'exis3ng'signals'into'a'new'signal 
• Dynamically'with'a'generator'block 
• Li>ing'from'the'impera3ve'world 
• Manually'producing'events
Signals(from(variables((KVO) 
Use$the$RACObserve(object,path)$macro$to$update$our$ 
unread$count$label3: 
[RACObserve(self.model, unreadCount) subscribeNext:^(NSNumber *value) { 
self.unreadCountLabel.text = [value stringValue]; 
}]; 
3"Real"developers"use"NSNumberForma+er
Transforming+exis.ng+signals 
- (RACSignal *)colorForUnreadCount { 
return [RACObserve(self.model,unreadCount) // this is a signal 
// 'map' subscribes to the signal above and returns 
// a new signal that sends a color for each new unreadCount 
map:^id(NSNumber *unread) { 
NSInteger count = unread.integerValue; 
return count < 10 ? [UIColor blackColor] : 
count < 20 ? [UIColor orangeColor] : 
[UIColor redColor]; 
}]; 
}
Transforming+exis.ng+signals 
// using the signal created in the previous slide 
[[model colorForUnreadCount] subscribeNext:^(UIColor *color) { 
self.unreadLabel.textColor = color; 
}]; 
// a shorter way to write this (for simple binding cases) 
// see <ReactiveCocoa/RACSusbscriptingAssignmentTrampoline.h> 
RAC(self.unreadLabel, textColor) = model.colorForUnreadCount;
Dynamic(signals 
- (RACSignal *)post:(NSDictionary *)formData toURL:(NSURL *)url { 
return [RACSignal createSignal:^(id<RACSubscriber> subscriber)] { 
// use AFNetworking to post form data 
NSURLSessionDataTask *task = [self.sessionManager POST:url parameters:data 
success:^(NSURLSessionDataTask *t, NSDictionary *responseObject) { 
if (responseObject) 
[subscriber sendNext:responseObject]; 
[subscriber sendCompleted]; 
} 
failure:^(NSURLSessionDataTask *t, NSError *error) { 
[subscriber sendError:error]; 
} 
]; 
return [RACDisposable disposableWithBlock:^{ 
[task cancel]; 
}]; 
}]; 
}
Dynamic(signals 
// use signal defined in previous slide 
RACSignal *postSignal = [manager post:@{@"name": @"Florent"} toURL:someURL]; 
[postSignal subscribeNext:^(NSDictionary *response) { 
NSLog(@"Server answered POST with %@", response); 
} error:^(NSError *error) { 
NSLog(@"POST failed with error: %@", error); 
} completed:{ 
NSLog(@"POST was successful"); 
}]
Li#ing&to&the&reac.ve&world 
[[[[[self 
rac_signalForSelector:@selector(locationManager:didRangeBeacons:inRegion:) 
fromProtocol:@protocol(CLLocationManagerDelegate)] 
reduceEach:^(CLLocationManager *manager, NSArray *beacons, CLBeaconRegion *region) { 
return [[beacons sortedArrayUsingFunction:proximityComparator context:NULL] 
firstObject] ?: [NSNull null]; 
}] 
filter:^BOOL(id value) { 
return [value isKindOfClass:[CLBeacon class]]; 
}] 
distinctUntilChanged] 
subscribeNext:^(CLBeacon *beacon) { 
NSLog(@"Last closest beacon: %@.%@", beacon.major, beacon.minor); 
}];
Manual&signals 
@property (strong) RACSubject *manualSignal; 
- (id)init { 
if (self = [super init]) { 
self.manualSignal = [[RACSubject alloc] init]; 
} 
return self; 
} 
- (void)dealloc { 
[self.manualSignal sendCompleted]; 
} 
- (RACSignal *)dataSignal { 
return self.manualSignal; 
} 
- (void)newDataObtained:(id)data { 
[self.manualSignal sendNext:data]; 
}
Manual&signals 
Note%that: 
• **RACSubject**#doesn't#automa.cally#emit#a#completed# 
event#on#dealloc.#You#must#do#it#manually. 
• Use#**RACReplaySubject**#to#create#a#subject#that#can# 
resend#one#or#more#of#the#last#next#values#to#new#subscribers. 
• Avoid#using#subjects#if#you#have#alterna.ves.
Disposables 
Any$subscrip,on$returns$a$RACDiposable.$Use$it$to$cancel$the$ 
subscrip,on
Schedulers 
• Based'on'serial'queues 
• Makes'cancella&on'easy! 
• Use'for'5mers'and'to'control'delivery'of'signals 
RACSignal *onMainThread = 
[signal deliverOn:[RACScheduler mainThreadScheduler]]; 
RACSignal *onSomeSerialQueue = 
[signal deliverOn:[[RACTargetQueueScheduler alloc] 
initWithName:@"My queue scheduler" 
targetQueue:someSerialQueue]]
Schedulers 
// A one-time timer that fires after 1 second on main thread 
RACDisposable *timer = [[RACScheduler mainThreadScheduler] 
afterDelay:1.0 
schedule:^{ 
NSLog(@"Delayed logging"); 
}]; 
// We can cancel this at any time 
[timer dispose];
Schedulers 
// A cancellable periodic action 
RACDisposable *timer = [[RACScheduler schedulerWithPriority:RACSchedulerPriorityDefault] 
after:[NSDate dateWithTimeIntervalSinceNow:1.0] 
repeatingEvery:0.5 
withLeeway:0.1 
schedule:^{ 
NSLog(@"Running periodic action on private queue"); 
}]; 
// Later: stop repeating 
[timer dispose];
Other&Reac*veCocoa&gems 
• @weakify @strongify @unsafeify 
• @onExit 
#import <ReactiveCocoa/RACExtScope.h> 
@weakify(self); 
[signal subscribeNext:^(id value) { 
@strongify(self); 
[self doSomethingWith:value]; 
}];
..."and"there"is"a"lot"more"... 
Commands,)sequences,)signal)mul1cas1ng,)side)effects,)channels,) 
backtraces)&)debugging)features,)event)materializa1on)and) 
dematerializa1on,)tes1ng)are)among)topics)not)covered)here. 
Framework)source)code)and)the)docset)for)Dash)are)useful) 
resources.
More%usage%examples 
- (RACSignal *)numberOfUnreadItems 
{ 
@weakify(self); 
return [[[[[self 
itemsUpdated] 
startWith:@YES] 
map:^(id updated) { 
@strongify(self); 
return self.unreadItemsCount; 
}] 
distinctUntilChanged] 
deliverOn:RACScheduler.mainThreadScheduler]; 
}]; 
}
More%usage%examples 
// Automatically update a badge on tab bar 
// when the count of unread items changes 
- (void)keepNewsItemUpToDate:(UITabBarItem *)newsItem { 
@weakify(newsItem); 
[self.model.numberOfUnreadItems subscribeNext:^(NSNumber *count) { 
@strongify(newsItem); 
if (count.integerValue) 
newsItem.badge = count.stringValue; 
else 
newsItem.badge = @""; 
}]; 
}
Links 
• Reac&veCocoa*framework 
• A*demo*project:*Reac&veWeather 
• The*introduc&on*to*reac&ve*programming*you've*been*missing 
• Enemy*of*the*state 
• Reac&ve*MVVM*(ModelFViewFViewModel):*perfect*match 
Also%look%up%'Reac.ve'%on%Github%and%filter%by%langage%(Obj>C).
Scary&interlude 
Yellow&parts&are&my&app. 
Not$always$like$this. 
This$shouldn't$put$you$off!
Summary
Reac%ve'programming'is'a'logical'way'to' 
model'and'react'to 
asynchronous'informa%on'flow
Reac%ve'code'clearly5'exposes'logic'and' 
transforma-ons'deriving'from'new'data 
5"finding"the"syntax"weird?"remember"your"first"steps"with"Objec:ve<C"and"all"these"square"brackets...
Enforcing)the)separa0on)between)data) 
producers)and)consumers,)reac0ve)code)is) 
more%testable
Once%trained%to%think%reac.vely, 
reducing)state)and)mutability 
is#the#next#logical#step#towards#code#safety,# 
stability#and#predictability.
Reac%veCocoa)is)a)rich)and)powerful)reac%ve) 
programming)framework)that)will)bring)your) 
code)to)a)new)level
Reac%veCocoa)is)a)rich)and)powerful)reac%ve) 
programming)framework)that)will)bring)your) 
code)to)a)new)level 
works&with&Swi+,&too4 
4"See"Colin"Eberhardt's"posts"for"Swi6,"Reac:veCocoa"and"MVVM"pr0n.
Thank&You&! 
Q"&"A 
fpillet@gmail.com 
@fpillet

More Related Content

What's hot

Avoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promisesAvoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promises
Ankit Agarwal
 
Node Boot Camp
Node Boot CampNode Boot Camp
Node Boot Camp
Troy Miles
 
An Introduction to Reactive Cocoa
An Introduction to Reactive CocoaAn Introduction to Reactive Cocoa
An Introduction to Reactive Cocoa
SmartLogic
 
Javascript Promises/Q Library
Javascript Promises/Q LibraryJavascript Promises/Q Library
Javascript Promises/Q Library
async_io
 
Understanding Asynchronous JavaScript
Understanding Asynchronous JavaScriptUnderstanding Asynchronous JavaScript
Understanding Asynchronous JavaScript
jnewmanux
 
Asynchronous programming done right - Node.js
Asynchronous programming done right - Node.jsAsynchronous programming done right - Node.js
Asynchronous programming done right - Node.js
Piotr Pelczar
 
Callbacks, promises, generators - asynchronous javascript
Callbacks, promises, generators - asynchronous javascriptCallbacks, promises, generators - asynchronous javascript
Callbacks, promises, generators - asynchronous javascript
Łukasz Kużyński
 
All you need to know about the JavaScript event loop
All you need to know about the JavaScript event loopAll you need to know about the JavaScript event loop
All you need to know about the JavaScript event loop
Saša Tatar
 
Découvrir dtrace en ligne de commande.
Découvrir dtrace en ligne de commande.Découvrir dtrace en ligne de commande.
Découvrir dtrace en ligne de commande.
CocoaHeads France
 
ES6: The Awesome Parts
ES6: The Awesome PartsES6: The Awesome Parts
ES6: The Awesome Parts
Domenic Denicola
 
Reactive cocoa made Simple with Swift
Reactive cocoa made Simple with SwiftReactive cocoa made Simple with Swift
Reactive cocoa made Simple with Swift
Colin Eberhardt
 
ReactiveCocoa and Swift, Better Together
ReactiveCocoa and Swift, Better TogetherReactiveCocoa and Swift, Better Together
ReactiveCocoa and Swift, Better Together
Colin Eberhardt
 
IoT Best practices
 IoT Best practices IoT Best practices
IoT Best practices
CocoaHeads France
 
How to send gzipped requests with boto3
How to send gzipped requests with boto3How to send gzipped requests with boto3
How to send gzipped requests with boto3
Luciano Mammino
 
Fast C++ Web Servers
Fast C++ Web ServersFast C++ Web Servers
Fast C++ Web Servers
Troy Miles
 
Présentation de HomeKit
Présentation de HomeKitPrésentation de HomeKit
Présentation de HomeKit
CocoaHeads France
 
What's New in ES6 for Web Devs
What's New in ES6 for Web DevsWhat's New in ES6 for Web Devs
What's New in ES6 for Web Devs
Rami Sayar
 
Node.js - Best practices
Node.js  - Best practicesNode.js  - Best practices
Node.js - Best practices
Felix Geisendörfer
 
Reactive Programming Patterns with RxSwift
Reactive Programming Patterns with RxSwiftReactive Programming Patterns with RxSwift
Reactive Programming Patterns with RxSwift
Florent Pillet
 
Introduction to es6
Introduction to es6Introduction to es6
Introduction to es6
NexThoughts Technologies
 

What's hot (20)

Avoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promisesAvoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promises
 
Node Boot Camp
Node Boot CampNode Boot Camp
Node Boot Camp
 
An Introduction to Reactive Cocoa
An Introduction to Reactive CocoaAn Introduction to Reactive Cocoa
An Introduction to Reactive Cocoa
 
Javascript Promises/Q Library
Javascript Promises/Q LibraryJavascript Promises/Q Library
Javascript Promises/Q Library
 
Understanding Asynchronous JavaScript
Understanding Asynchronous JavaScriptUnderstanding Asynchronous JavaScript
Understanding Asynchronous JavaScript
 
Asynchronous programming done right - Node.js
Asynchronous programming done right - Node.jsAsynchronous programming done right - Node.js
Asynchronous programming done right - Node.js
 
Callbacks, promises, generators - asynchronous javascript
Callbacks, promises, generators - asynchronous javascriptCallbacks, promises, generators - asynchronous javascript
Callbacks, promises, generators - asynchronous javascript
 
All you need to know about the JavaScript event loop
All you need to know about the JavaScript event loopAll you need to know about the JavaScript event loop
All you need to know about the JavaScript event loop
 
Découvrir dtrace en ligne de commande.
Découvrir dtrace en ligne de commande.Découvrir dtrace en ligne de commande.
Découvrir dtrace en ligne de commande.
 
ES6: The Awesome Parts
ES6: The Awesome PartsES6: The Awesome Parts
ES6: The Awesome Parts
 
Reactive cocoa made Simple with Swift
Reactive cocoa made Simple with SwiftReactive cocoa made Simple with Swift
Reactive cocoa made Simple with Swift
 
ReactiveCocoa and Swift, Better Together
ReactiveCocoa and Swift, Better TogetherReactiveCocoa and Swift, Better Together
ReactiveCocoa and Swift, Better Together
 
IoT Best practices
 IoT Best practices IoT Best practices
IoT Best practices
 
How to send gzipped requests with boto3
How to send gzipped requests with boto3How to send gzipped requests with boto3
How to send gzipped requests with boto3
 
Fast C++ Web Servers
Fast C++ Web ServersFast C++ Web Servers
Fast C++ Web Servers
 
Présentation de HomeKit
Présentation de HomeKitPrésentation de HomeKit
Présentation de HomeKit
 
What's New in ES6 for Web Devs
What's New in ES6 for Web DevsWhat's New in ES6 for Web Devs
What's New in ES6 for Web Devs
 
Node.js - Best practices
Node.js  - Best practicesNode.js  - Best practices
Node.js - Best practices
 
Reactive Programming Patterns with RxSwift
Reactive Programming Patterns with RxSwiftReactive Programming Patterns with RxSwift
Reactive Programming Patterns with RxSwift
 
Introduction to es6
Introduction to es6Introduction to es6
Introduction to es6
 

Viewers also liked

NSLogger - Cocoaheads Paris Presentation - English
NSLogger - Cocoaheads Paris Presentation - EnglishNSLogger - Cocoaheads Paris Presentation - English
NSLogger - Cocoaheads Paris Presentation - English
Florent Pillet
 
Thinking Reactive
Thinking ReactiveThinking Reactive
Thinking Reactive
Thai Son Dang
 
MVVM & RxSwift
MVVM & RxSwiftMVVM & RxSwift
MVVM & RxSwift
Thai Son Dang
 
Yhdessä oppimista verkossa
Yhdessä oppimista verkossaYhdessä oppimista verkossa
Yhdessä oppimista verkossaTiina Sarisalmi
 
Juliana New York
Juliana  New YorkJuliana  New York
Juliana New York
guest3c3576
 
Lunch Recipe from Romania
Lunch Recipe from RomaniaLunch Recipe from Romania
Lunch Recipe from RomaniaTiina Sarisalmi
 
One Source Solutions
One Source SolutionsOne Source Solutions
One Source Solutionsscaster
 
Formative Capitalism
Formative CapitalismFormative Capitalism
Formative Capitalism
ANM Farukh
 
Facebook
FacebookFacebook
Facebook
Johanda
 
10 Forecasts Bangladesh Telco Industry
10 Forecasts Bangladesh Telco Industry10 Forecasts Bangladesh Telco Industry
10 Forecasts Bangladesh Telco IndustryANM Farukh
 
NCrafts.IO 2015 - Future of User eXperiences
NCrafts.IO 2015 - Future of User eXperiencesNCrafts.IO 2015 - Future of User eXperiences
NCrafts.IO 2015 - Future of User eXperiences
Vincent Guigui
 
eTwinning - lyhyt johdatus työpajatyöskentelyyn
eTwinning - lyhyt johdatus työpajatyöskentelyyneTwinning - lyhyt johdatus työpajatyöskentelyyn
eTwinning - lyhyt johdatus työpajatyöskentelyyn
Tiina Sarisalmi
 
Iside 26 05e Frodi Assicurazioni
Iside 26 05e Frodi AssicurazioniIside 26 05e Frodi Assicurazioni
Iside 26 05e Frodi Assicurazioni
Marco Contini
 
Exercici11.3
Exercici11.3Exercici11.3
Exercici11.3
Anna Fernández
 
Oriveden Keskuskoulu - Christmas Greeting from Preschool
Oriveden Keskuskoulu - Christmas Greeting from PreschoolOriveden Keskuskoulu - Christmas Greeting from Preschool
Oriveden Keskuskoulu - Christmas Greeting from PreschoolTiina Sarisalmi
 
Ibiza Charter Boat: Sunseeker Predator 68 | THE DOER IBIZA. Bookings: + 34 63...
Ibiza Charter Boat: Sunseeker Predator 68 | THE DOER IBIZA. Bookings: + 34 63...Ibiza Charter Boat: Sunseeker Predator 68 | THE DOER IBIZA. Bookings: + 34 63...
Ibiza Charter Boat: Sunseeker Predator 68 | THE DOER IBIZA. Bookings: + 34 63...
Javier Pérez Gallego ★★★★★ The DOER Ibiza
 
Using Moodle to Support Differentiated Instruction
Using Moodle to Support Differentiated InstructionUsing Moodle to Support Differentiated Instruction
Using Moodle to Support Differentiated Instruction
yeske.patricia
 

Viewers also liked (20)

NSLogger - Cocoaheads Paris Presentation - English
NSLogger - Cocoaheads Paris Presentation - EnglishNSLogger - Cocoaheads Paris Presentation - English
NSLogger - Cocoaheads Paris Presentation - English
 
Thinking Reactive
Thinking ReactiveThinking Reactive
Thinking Reactive
 
MVVM & RxSwift
MVVM & RxSwiftMVVM & RxSwift
MVVM & RxSwift
 
Yhdessä oppimista verkossa
Yhdessä oppimista verkossaYhdessä oppimista verkossa
Yhdessä oppimista verkossa
 
Juliana New York
Juliana  New YorkJuliana  New York
Juliana New York
 
Lunch Recipe from Romania
Lunch Recipe from RomaniaLunch Recipe from Romania
Lunch Recipe from Romania
 
One Source Solutions
One Source SolutionsOne Source Solutions
One Source Solutions
 
Formative Capitalism
Formative CapitalismFormative Capitalism
Formative Capitalism
 
Facebook
FacebookFacebook
Facebook
 
10 Forecasts Bangladesh Telco Industry
10 Forecasts Bangladesh Telco Industry10 Forecasts Bangladesh Telco Industry
10 Forecasts Bangladesh Telco Industry
 
Twelve Gods of Olympus
Twelve Gods of OlympusTwelve Gods of Olympus
Twelve Gods of Olympus
 
NCrafts.IO 2015 - Future of User eXperiences
NCrafts.IO 2015 - Future of User eXperiencesNCrafts.IO 2015 - Future of User eXperiences
NCrafts.IO 2015 - Future of User eXperiences
 
Polish Cuisine Book
Polish Cuisine BookPolish Cuisine Book
Polish Cuisine Book
 
Welcome to Dywity
Welcome to DywityWelcome to Dywity
Welcome to Dywity
 
eTwinning - lyhyt johdatus työpajatyöskentelyyn
eTwinning - lyhyt johdatus työpajatyöskentelyyneTwinning - lyhyt johdatus työpajatyöskentelyyn
eTwinning - lyhyt johdatus työpajatyöskentelyyn
 
Iside 26 05e Frodi Assicurazioni
Iside 26 05e Frodi AssicurazioniIside 26 05e Frodi Assicurazioni
Iside 26 05e Frodi Assicurazioni
 
Exercici11.3
Exercici11.3Exercici11.3
Exercici11.3
 
Oriveden Keskuskoulu - Christmas Greeting from Preschool
Oriveden Keskuskoulu - Christmas Greeting from PreschoolOriveden Keskuskoulu - Christmas Greeting from Preschool
Oriveden Keskuskoulu - Christmas Greeting from Preschool
 
Ibiza Charter Boat: Sunseeker Predator 68 | THE DOER IBIZA. Bookings: + 34 63...
Ibiza Charter Boat: Sunseeker Predator 68 | THE DOER IBIZA. Bookings: + 34 63...Ibiza Charter Boat: Sunseeker Predator 68 | THE DOER IBIZA. Bookings: + 34 63...
Ibiza Charter Boat: Sunseeker Predator 68 | THE DOER IBIZA. Bookings: + 34 63...
 
Using Moodle to Support Differentiated Instruction
Using Moodle to Support Differentiated InstructionUsing Moodle to Support Differentiated Instruction
Using Moodle to Support Differentiated Instruction
 

Similar to Introduction to reactive programming & ReactiveCocoa

Router Queue Simulation in C++ in MMNN and MM1 conditions
Router Queue Simulation in C++ in MMNN and MM1 conditionsRouter Queue Simulation in C++ in MMNN and MM1 conditions
Router Queue Simulation in C++ in MMNN and MM1 conditionsMorteza Mahdilar
 
Cpp tutorial
Cpp tutorialCpp tutorial
Cpp tutorial
Vikas Sharma
 
CppTutorial.ppt
CppTutorial.pptCppTutorial.ppt
CppTutorial.ppt
HODZoology3
 
Lambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter LawreyLambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter Lawrey
JAXLondon_Conference
 
Learn You a ReactiveCocoa for Great Good
Learn You a ReactiveCocoa for Great GoodLearn You a ReactiveCocoa for Great Good
Learn You a ReactiveCocoa for Great Good
Jason Larsen
 
Reactive cocoa
Reactive cocoaReactive cocoa
Reactive cocoa
iacisclo
 
Intro to ReactiveCocoa
Intro to ReactiveCocoaIntro to ReactiveCocoa
Intro to ReactiveCocoa
kleneau
 
Intro to React
Intro to ReactIntro to React
Intro to React
Troy Miles
 
Profiling Ruby
Profiling RubyProfiling Ruby
Profiling Ruby
Ian Pointer
 
MLflow with R
MLflow with RMLflow with R
MLflow with R
Databricks
 
Don't Be Afraid of Abstract Syntax Trees
Don't Be Afraid of Abstract Syntax TreesDon't Be Afraid of Abstract Syntax Trees
Don't Be Afraid of Abstract Syntax Trees
Jamund Ferguson
 
Emerging Languages: A Tour of the Horizon
Emerging Languages: A Tour of the HorizonEmerging Languages: A Tour of the Horizon
Emerging Languages: A Tour of the Horizon
Alex Payne
 
Complex Made Simple: Sleep Better with TorqueBox
Complex Made Simple: Sleep Better with TorqueBoxComplex Made Simple: Sleep Better with TorqueBox
Complex Made Simple: Sleep Better with TorqueBox
bobmcwhirter
 
The Evolution of Async-Programming (SD 2.0, JavaScript)
The Evolution of Async-Programming (SD 2.0, JavaScript)The Evolution of Async-Programming (SD 2.0, JavaScript)
The Evolution of Async-Programming (SD 2.0, JavaScript)jeffz
 
React Development with the MERN Stack
React Development with the MERN StackReact Development with the MERN Stack
React Development with the MERN Stack
Troy Miles
 
Background Jobs - Com BackgrounDRb
Background Jobs - Com BackgrounDRbBackground Jobs - Com BackgrounDRb
Background Jobs - Com BackgrounDRbJuan Maiz
 
Server side JavaScript: going all the way
Server side JavaScript: going all the wayServer side JavaScript: going all the way
Server side JavaScript: going all the way
Oleg Podsechin
 
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)jeffz
 

Similar to Introduction to reactive programming & ReactiveCocoa (20)

Router Queue Simulation in C++ in MMNN and MM1 conditions
Router Queue Simulation in C++ in MMNN and MM1 conditionsRouter Queue Simulation in C++ in MMNN and MM1 conditions
Router Queue Simulation in C++ in MMNN and MM1 conditions
 
Cpp tutorial
Cpp tutorialCpp tutorial
Cpp tutorial
 
CppTutorial.ppt
CppTutorial.pptCppTutorial.ppt
CppTutorial.ppt
 
Lambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter LawreyLambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter Lawrey
 
Learn You a ReactiveCocoa for Great Good
Learn You a ReactiveCocoa for Great GoodLearn You a ReactiveCocoa for Great Good
Learn You a ReactiveCocoa for Great Good
 
Reactive cocoa
Reactive cocoaReactive cocoa
Reactive cocoa
 
Intro to ReactiveCocoa
Intro to ReactiveCocoaIntro to ReactiveCocoa
Intro to ReactiveCocoa
 
Intro to React
Intro to ReactIntro to React
Intro to React
 
Profiling Ruby
Profiling RubyProfiling Ruby
Profiling Ruby
 
Day 1
Day 1Day 1
Day 1
 
MLflow with R
MLflow with RMLflow with R
MLflow with R
 
Don't Be Afraid of Abstract Syntax Trees
Don't Be Afraid of Abstract Syntax TreesDon't Be Afraid of Abstract Syntax Trees
Don't Be Afraid of Abstract Syntax Trees
 
Emerging Languages: A Tour of the Horizon
Emerging Languages: A Tour of the HorizonEmerging Languages: A Tour of the Horizon
Emerging Languages: A Tour of the Horizon
 
Complex Made Simple: Sleep Better with TorqueBox
Complex Made Simple: Sleep Better with TorqueBoxComplex Made Simple: Sleep Better with TorqueBox
Complex Made Simple: Sleep Better with TorqueBox
 
The Evolution of Async-Programming (SD 2.0, JavaScript)
The Evolution of Async-Programming (SD 2.0, JavaScript)The Evolution of Async-Programming (SD 2.0, JavaScript)
The Evolution of Async-Programming (SD 2.0, JavaScript)
 
React Development with the MERN Stack
React Development with the MERN StackReact Development with the MERN Stack
React Development with the MERN Stack
 
Background Jobs - Com BackgrounDRb
Background Jobs - Com BackgrounDRbBackground Jobs - Com BackgrounDRb
Background Jobs - Com BackgrounDRb
 
Server side JavaScript: going all the way
Server side JavaScript: going all the wayServer side JavaScript: going all the way
Server side JavaScript: going all the way
 
Wider than rails
Wider than railsWider than rails
Wider than rails
 
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
 

Recently uploaded

Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
Tendenci - The Open Source AMS (Association Management Software)
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Globus
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
Ortus Solutions, Corp
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
WSO2
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 

Recently uploaded (20)

Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 

Introduction to reactive programming & ReactiveCocoa