SlideShare a Scribd company logo
1 of 54
Download to read offline
REACTIVE COCOA
Trilha iOS
Carlos Vinícius Real Guilherme Endres
Software Engineer Software Engineer
ReactiveCocoa?
ISSO NÃO VAI DAR CERTO…
RAC
IOS
ReactiveCocoa?
Functional Reactive
Programming
Reactive Cocoa
Reactive Programming
+
Functional Programming
Reactive Cocoa
Reactive Programming
+
Functional Programming
Reactive Cocoa
Reactive Programming
Reactive Programming
+
Functional Programming
Reactive Cocoa
Functional Programming
Imperativo vs Declarativo
FRP | Imperativo
Como
var strongBeers = [Beer]();
for beer in beers {
if beer.alcohoolPercent > 6 {
strongBeers.append(beer)
}
}
FRP | Declarativo
O que
beers.filter{ $0.alcohoolPercent > 6 }
SIGNALS 

& 

SIGNALS PRODUCERS
Weiss
map
filter
RedAle
http://neilpa.me/rac-marbles
EVENTS
Events
Next
Completed
Failed
Interrupted
CallBack blocks
KVO
Actions
Delegate
NSNOTIFICATION
CODE
CODE
Swift
ReactiveCocoa4
MVVM
BUTTON SIGNAL
let buttonSignal: RACSignal = enterButton.rac_signalForControlEvents(
UIControlEvents.TouchUpInside)
USERVIEWCONTROLLER | BUTTON SIGNAL
let buttonSignal: RACSignal = enterButton.rac_signalForControlEvents(
UIControlEvents.TouchUpInside)
let buttonSignalProducer: SignalProducer = buttonSignal
.toSignalProducer()
.observeOn(UIScheduler())
USERVIEWCONTROLLER | BUTTON SIGNAL PRODUCER
OPERATORS
buttonSignalProducer
.flatMap(
transform:)
USERVIEWCONTROLLER | OPERATORS
buttonSignalProducer
.flatMap(FlattenStrategy.Latest,
transform: userViewModel.saveUser)
USERVIEWCONTROLLER | OPERATORS
buttonSignalProducer
.flatMap(FlattenStrategy.Latest,
transform: userViewModel.saveUser)
.startWithNext { username in
self.performSegueWithIdentifier("beerControllerSegue", sender: self)
}
USERVIEWCONTROLLER | OPERATORS
MUTABLE PROPERTY
var quantity = MutableProperty<Int>(0)
var userImage = MutableProperty<UIImage?>.init(defaultImage)
BEERVIEWMODEL | MUTABLE PROPERTIES
BINDING<~
beerViewModel.quantity <~ beerQuantityProducer
BEERVIEWCONTROLLER | BINDING
MÉTODOS
func imageForBeer(quantity: Int) -> SignalProducer<UIImage?, NoError> {
}
BEERVIEWMODEL | MÉTODOS
func imageForBeer(quantity: Int) -> SignalProducer<UIImage?, NoError> {
return SignalProducer { observe, disposable in
}.delay(1, onScheduler: QueueScheduler.mainQueueScheduler)
}
BEERVIEWMODEL | MÉTODOS
func imageForBeer(quantity: Int) -> SignalProducer<UIImage?, NoError> {
return SignalProducer { observe, disposable in
guard let image: UIImage = imageForQuantity(quantity) else {
print("Failed to get image for quantity (quantity)")
return
}
}.delay(1, onScheduler: QueueScheduler.mainQueueScheduler)
}
BEERVIEWMODEL | MÉTODOS
func imageForBeer(quantity: Int) -> SignalProducer<UIImage?, NoError> {
return SignalProducer { observe, disposable in
guard let image: UIImage = imageForQuantity(quantity) else {
print("Failed to get image for quantity (quantity)")
return
}
observe.sendNext(image)
}.delay(1, onScheduler: QueueScheduler.mainQueueScheduler)
}
BEERVIEWMODEL | MÉTODOS
userImage <~ quantity.producer
BEERVIEWMODEL | BINDING
userImage <~ quantity.producer
.skipRepeats()
BEERVIEWMODEL | BINDING
userImage <~ quantity.producer
.skipRepeats()
.flatMap(FlattenStrategy.Latest, transform: imageForBeer)
BEERVIEWMODEL | BINDING
personDrunkImage.rac_image <~ beerViewModel.userImage
BEERVIEWCONTROLLER | BINDING
UNIT TEST
let userViewModel: UserViewModel = UserViewModel()
UNIT TEST | SUCESSO
let userViewModel: UserViewModel = UserViewModel()
userViewModel.username.value = "Skywalker"
UNIT TEST | SUCESSO
let userViewModel: UserViewModel = UserViewModel()
userViewModel.username.value = "Skywalker"
userViewModel.saveUser().on(
).start()
UNIT TEST | SUCESSO
let userViewModel: UserViewModel = UserViewModel()
userViewModel.username.value = "Skywalker"
userViewModel.saveUser().on(
completed: {
successExpectation.fulfill()
}, failed: { error in
XCTFail()
}).start()
UNIT TEST | SUCESSO
let userViewModel: UserViewModel = UserViewModel()
userViewModel.username.value = "Darth Vader"
userViewModel.saveUser().on(
completed: {
XCTFail()
}, failed: { error in
successExpectation.fulfill()
}).start()
UNIT TEST | FALHA
PROBLEMAS
https://github.com/username/project
Signals
Signal Producer
Map
Functional programming
"Se liga no mestiço, na batida do cavaco"?
Reactive
Reduce
Links úteis | Reactive Cocoa
http://reactivecocoa.io/philosophy.html
https://github.com/ReactiveCocoa/ReactiveCocoa
http://www.sprynthesis.com/2014/12/06/reactivecocoa-mvvm-
introduction/
https://nomothetis.svbtle.com/an-introduction-to-reactivecocoa
http://neilpa.me/rac-marbles
https://github.com/gfendres/ractdc2016
CVINICIUSREAL@GMAIL.COM
Carlos Vinícius Real Guilherme Endres
GFENDRES@GMAIL.COM

More Related Content

Viewers also liked

ReactiveCocoa Goodness - Part I of II
ReactiveCocoa Goodness - Part I of IIReactiveCocoa Goodness - Part I of II
ReactiveCocoa Goodness - Part I of IImanuelmaly
 
ReactiveCocoa in Practice
ReactiveCocoa in PracticeReactiveCocoa in Practice
ReactiveCocoa in PracticeOutware Mobile
 
MV(C, mvvm) in iOS and ReactiveCocoa
MV(C, mvvm) in iOS and ReactiveCocoaMV(C, mvvm) in iOS and ReactiveCocoa
MV(C, mvvm) in iOS and ReactiveCocoaYi-Shou Chen
 
Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016
Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016
Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016Codemotion
 
Diseñando secuencias didacticas
Diseñando secuencias didacticasDiseñando secuencias didacticas
Diseñando secuencias didacticasjdrivera25
 
Nature of Experience
Nature of ExperienceNature of Experience
Nature of ExperienceShankar R
 
Bookreview : The wellness Sense OM Swamy
Bookreview : The wellness Sense  OM SwamyBookreview : The wellness Sense  OM Swamy
Bookreview : The wellness Sense OM SwamyNaveen Dubey
 
Introduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaIntroduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaFlorent Pillet
 
Introduction to User Experience Fundamentals
Introduction to User Experience FundamentalsIntroduction to User Experience Fundamentals
Introduction to User Experience FundamentalsChris LaRoche
 
Taller básico Herramientas Rendimiento DB2 en iSeries
Taller básico Herramientas Rendimiento DB2 en iSeriesTaller básico Herramientas Rendimiento DB2 en iSeries
Taller básico Herramientas Rendimiento DB2 en iSeriesXavier Espinoza
 
in in der 響應式編程
in in der 響應式編程in in der 響應式編程
in in der 響應式編程景隆 張
 
Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...
Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...
Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...Stanfy
 
From Java Stream to Java DataFrame
From Java Stream to Java DataFrameFrom Java Stream to Java DataFrame
From Java Stream to Java DataFrameChen-en Lu
 
Instrumento evaluacion univ a distancia ucr
Instrumento evaluacion univ a distancia ucrInstrumento evaluacion univ a distancia ucr
Instrumento evaluacion univ a distancia ucrUDELAS
 
Rethinking Mobile with Ionic
Rethinking Mobile with IonicRethinking Mobile with Ionic
Rethinking Mobile with IonicMike Hartington
 

Viewers also liked (18)

ReactiveCocoa Goodness - Part I of II
ReactiveCocoa Goodness - Part I of IIReactiveCocoa Goodness - Part I of II
ReactiveCocoa Goodness - Part I of II
 
ReactiveCocoa in Practice
ReactiveCocoa in PracticeReactiveCocoa in Practice
ReactiveCocoa in Practice
 
MV(C, mvvm) in iOS and ReactiveCocoa
MV(C, mvvm) in iOS and ReactiveCocoaMV(C, mvvm) in iOS and ReactiveCocoa
MV(C, mvvm) in iOS and ReactiveCocoa
 
[Lighting Talk] - Ionic 2 Tour
[Lighting Talk] - Ionic 2 Tour[Lighting Talk] - Ionic 2 Tour
[Lighting Talk] - Ionic 2 Tour
 
Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016
Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016
Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016
 
Diseñando secuencias didacticas
Diseñando secuencias didacticasDiseñando secuencias didacticas
Diseñando secuencias didacticas
 
Nature of Experience
Nature of ExperienceNature of Experience
Nature of Experience
 
Bookreview : The wellness Sense OM Swamy
Bookreview : The wellness Sense  OM SwamyBookreview : The wellness Sense  OM Swamy
Bookreview : The wellness Sense OM Swamy
 
Introduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaIntroduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoa
 
Introduction to User Experience Fundamentals
Introduction to User Experience FundamentalsIntroduction to User Experience Fundamentals
Introduction to User Experience Fundamentals
 
MVVM on iOS
MVVM on iOSMVVM on iOS
MVVM on iOS
 
Taller básico Herramientas Rendimiento DB2 en iSeries
Taller básico Herramientas Rendimiento DB2 en iSeriesTaller básico Herramientas Rendimiento DB2 en iSeries
Taller básico Herramientas Rendimiento DB2 en iSeries
 
in in der 響應式編程
in in der 響應式編程in in der 響應式編程
in in der 響應式編程
 
Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...
Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...
Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...
 
From Java Stream to Java DataFrame
From Java Stream to Java DataFrameFrom Java Stream to Java DataFrame
From Java Stream to Java DataFrame
 
Instrumento evaluacion univ a distancia ucr
Instrumento evaluacion univ a distancia ucrInstrumento evaluacion univ a distancia ucr
Instrumento evaluacion univ a distancia ucr
 
Rethinking Mobile with Ionic
Rethinking Mobile with IonicRethinking Mobile with Ionic
Rethinking Mobile with Ionic
 
The Warming Web
The Warming WebThe Warming Web
The Warming Web
 

Similar to ReactiveCocoa - TDC 2016

Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to productionFDConf
 
Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to productionJenya Terpil
 
MOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentMOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentanistar sung
 
Leaving Interface Builder Behind
Leaving Interface Builder BehindLeaving Interface Builder Behind
Leaving Interface Builder BehindJohn Wilker
 
BlackBerry10 apps with Adobe AIR & Apache Flex - BlackBerry JAM Europe
BlackBerry10 apps with Adobe AIR & Apache Flex - BlackBerry JAM EuropeBlackBerry10 apps with Adobe AIR & Apache Flex - BlackBerry JAM Europe
BlackBerry10 apps with Adobe AIR & Apache Flex - BlackBerry JAM EuropeMariano Carrizo
 
Developing AIR for Android with Flash Professional
Developing AIR for Android with Flash ProfessionalDeveloping AIR for Android with Flash Professional
Developing AIR for Android with Flash ProfessionalChris Griffith
 
Ui perfomance
Ui perfomanceUi perfomance
Ui perfomanceCleveroad
 
Asynchronous Programming with JavaScript
Asynchronous Programming with JavaScriptAsynchronous Programming with JavaScript
Asynchronous Programming with JavaScriptWebF
 
Google Fit, Android Wear & Xamarin
Google Fit, Android Wear & XamarinGoogle Fit, Android Wear & Xamarin
Google Fit, Android Wear & XamarinPeter Friese
 
Highload JavaScript Framework without Inheritance
Highload JavaScript Framework without InheritanceHighload JavaScript Framework without Inheritance
Highload JavaScript Framework without InheritanceFDConf
 
How React Native, Appium and me made each other shine @Frontmania 16-11-2018
How React Native, Appium and me made each other shine @Frontmania 16-11-2018How React Native, Appium and me made each other shine @Frontmania 16-11-2018
How React Native, Appium and me made each other shine @Frontmania 16-11-2018Wim Selles
 
The fundamental problems of GUI applications and why people choose React
The fundamental problems of GUI applications and why people choose ReactThe fundamental problems of GUI applications and why people choose React
The fundamental problems of GUI applications and why people choose ReactOliver N
 
JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"GeeksLab Odessa
 
A Graphical Way of Thinking About React Designs
A Graphical Way of Thinking About React DesignsA Graphical Way of Thinking About React Designs
A Graphical Way of Thinking About React Designsolafnouvortne
 
Kotlin Mullets
Kotlin MulletsKotlin Mullets
Kotlin MulletsJames Ward
 
WWDC 2016 Personal Recollection
WWDC 2016 Personal RecollectionWWDC 2016 Personal Recollection
WWDC 2016 Personal RecollectionMasayuki Iwai
 
AngularJS - Services
AngularJS - ServicesAngularJS - Services
AngularJS - ServicesNir Kaufman
 
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...Codemotion
 
Composable and streamable Play apps
Composable and streamable Play appsComposable and streamable Play apps
Composable and streamable Play appsYevgeniy Brikman
 

Similar to ReactiveCocoa - TDC 2016 (20)

Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to production
 
Android Oreo
Android OreoAndroid Oreo
Android Oreo
 
Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to production
 
MOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentMOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app development
 
Leaving Interface Builder Behind
Leaving Interface Builder BehindLeaving Interface Builder Behind
Leaving Interface Builder Behind
 
BlackBerry10 apps with Adobe AIR & Apache Flex - BlackBerry JAM Europe
BlackBerry10 apps with Adobe AIR & Apache Flex - BlackBerry JAM EuropeBlackBerry10 apps with Adobe AIR & Apache Flex - BlackBerry JAM Europe
BlackBerry10 apps with Adobe AIR & Apache Flex - BlackBerry JAM Europe
 
Developing AIR for Android with Flash Professional
Developing AIR for Android with Flash ProfessionalDeveloping AIR for Android with Flash Professional
Developing AIR for Android with Flash Professional
 
Ui perfomance
Ui perfomanceUi perfomance
Ui perfomance
 
Asynchronous Programming with JavaScript
Asynchronous Programming with JavaScriptAsynchronous Programming with JavaScript
Asynchronous Programming with JavaScript
 
Google Fit, Android Wear & Xamarin
Google Fit, Android Wear & XamarinGoogle Fit, Android Wear & Xamarin
Google Fit, Android Wear & Xamarin
 
Highload JavaScript Framework without Inheritance
Highload JavaScript Framework without InheritanceHighload JavaScript Framework without Inheritance
Highload JavaScript Framework without Inheritance
 
How React Native, Appium and me made each other shine @Frontmania 16-11-2018
How React Native, Appium and me made each other shine @Frontmania 16-11-2018How React Native, Appium and me made each other shine @Frontmania 16-11-2018
How React Native, Appium and me made each other shine @Frontmania 16-11-2018
 
The fundamental problems of GUI applications and why people choose React
The fundamental problems of GUI applications and why people choose ReactThe fundamental problems of GUI applications and why people choose React
The fundamental problems of GUI applications and why people choose React
 
JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"
 
A Graphical Way of Thinking About React Designs
A Graphical Way of Thinking About React DesignsA Graphical Way of Thinking About React Designs
A Graphical Way of Thinking About React Designs
 
Kotlin Mullets
Kotlin MulletsKotlin Mullets
Kotlin Mullets
 
WWDC 2016 Personal Recollection
WWDC 2016 Personal RecollectionWWDC 2016 Personal Recollection
WWDC 2016 Personal Recollection
 
AngularJS - Services
AngularJS - ServicesAngularJS - Services
AngularJS - Services
 
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...
 
Composable and streamable Play apps
Composable and streamable Play appsComposable and streamable Play apps
Composable and streamable Play apps
 

Recently uploaded

Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝
Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝
Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝soniya singh
 
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceanilsa9823
 
9892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x79892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x7Pooja Nehwal
 
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,Pooja Nehwal
 
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceanilsa9823
 
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...Niamh verma
 
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...wyqazy
 

Recently uploaded (7)

Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝
Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝
Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝
 
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
 
9892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x79892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x7
 
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
 
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
 
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...
 
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...
 

ReactiveCocoa - TDC 2016