SlideShare uma empresa Scribd logo
1 de 46
Baixar para ler offline
Fast’n Furious Introduction to 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz 
Swift 
Fernando Rodriguez 
fernando@agbo.biz 
@frr149
Objective C without the C? Not even close 
Objective C 
May I help you? 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz 
Swift 
Could not find an overload for '/' that accepts 
the supplied arguments!!!!
Objective C without the C? 
• Not really… 
• Much bigger language. 
• Opposing philosophy: ObjC treats you as an adult, Swift behaves 
as a nanny. 
• Clearly influenced by C++ and Haskell. 
• If you like the compiler to yell at you, you’re gonna love Swift! ;-) 
• Objective C allows to go ahead without asking permission, even 
though you might end up asking forgiveness. 
• Swift is like a strict victorian teacher that will force you to ask 
permission for everything. 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Basic Building Blocks 
Let’s move to the Playground… 
But first, make sure you have the latest (GM) version of Xcode 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Functions 101 
• Functions have type too. 
• And this can become confusing… 
• typealias is your friend 
• Parameters can have both internal and external names 
• Any parameter can have a default value 
• Functions can return several objects 
• Pattern matching makes this very convenient 
• You can’t modify an argument inside a function…unless you say 
please. 
• You can pass parameters by ref (InOut) 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Functions 101 
Let’s move to the Playground… 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
High Level Functions 
•Functions are a type, so we should be able to manipulate them as 
any other type. 
•Functions as parameters to other functions. 
•Functions as return values of other functions. 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
High Level Functions 
Let’s move to the Playground… 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Functions Reloaded! 
•Enter the closure 
•It’s a block! 
•Syntax 
•Capture of lexical environment 
•Syntactic sugar, lotsa syntactic sugar. 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz 
Closure 
"Syntactic sugar causes cancer of the semi-colons” 
Alan Perlis
Functions Reloaded: Closures! 
Let’s move to the Playground… 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
The Fear of 
Nil: 
Optionals 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Who’s afraid of the big bad nil? 
•Objective C eats raw nils everyday for breakfast. 
•In Swift nils, are fearsome creatures that must be hidden inside a 
box. 
•This box is called an Optional. 
•It can hold a nil and some other type. 
•We must learn how to create optionals (put things inside the box) 
•and also how to get things out of it. 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Optionals 
Let’s move to the Playground… 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Decorators 
•Decorators are functions that modify other functions. 
•Common patter in other languages, such as Python. 
•Decorators allow to abstract away complex and ugly code that might 
not be always necessary. 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Decorators 
Let’s move to the Playground… 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Aggregate Types 
•Tuples 
•Structs 
•Classes 
•Enums 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Aggregate types 
•Enums and structs are value types that are always copied, even 
when assigning to a new variable. 
•Beware of excessive copying, said ye olde C++ developer… 
•Classes are reference types, just like in Objective C. They are 
managed by ARC. 
•Structs have “memberwise initialisers” by default. Classes don’t. 
•Structs are widely used in Swift (Int, Array, Dictionary, etc…), and 
heavily optimised by the compiler. 
•Only classes have inheritance 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Extending Aggregate Types 
•There are 2 mechanisms: 
•Inheritance (class only) 
•Extensions 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Inheritance 
•Single inheritance only, but many protocols. 
•All classes can define a super class. 
•A class without a super class is considered a Base Class (like 
NSObject or NSProxy in Objective C). 
•Base clases actually do have a super class, called SwiftObject, but 
it’s hidden. 
•Swift classes are also Object C classes, so you can inherit from 
NSObject (for example) in Swift. 
•You can override methods and properties with override. 
•You can prevent inheritance or overriding with @final. 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Initialization 
•Default initializer: init() 
•Structs and enums can also have initialisers 
•All initializers get external names by default 
•Never start a parameter name with the word with. This interferes 
with the way Swift interfaces with Objective C. 
•Convenience initializers are prepended with the word convenience. 
•Initializers are only inherited if you don’t define any designated 
initialiser in the subclass. 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Aggregate Types 
Let’s move to the Playground… 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Extensions 101 
•Similar to Objective C categories, but without a name. 
•Available to enums, structs and classes 
•Used only to add new behaviour. Never to specialise existing 
behaviour (that’s what inheritance is for). 
•Unlike in Objective C, extensions are anonymous. 
•Unlike in Objective C, you cant use extensions to break inheritance. 
•Extensively used by Swift itself. 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Extensions can 
•Add computed properties 
•Define instance and type methods 
•Provide new convenience inits 
•Make an existing type conform to a protocol 
•And some other stuff too… 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Extensions cannot 
•Add stored properties 
•Provide new designated initialisers 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Extensions 101 
Let’s move to the Playground… 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Protocols 101 
•Protocols are the entry point to extending the language. 
•Extensively used by Swift itself. 
•Even though protocols are implemented as a type, they can be used 
as so. 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Example Protocol 
protocol MyProtocol: SomeProtocol, AnotherProtocol{ 
// Class property 
class var aClassProperty: String {get} 
// Instance Properties 
var readWriteProperty: Int {set get} 
var readOnlyProperty: String {get} 
// Class Methods 
class func foo() -> ()->(Bool) 
// Instance Methods 
func random() -> Double 
} 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Generics 101 
•Similar to C++ templates 
•Generic functions 
•Generic types 
•Protocol constraints on generic types 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Examples 
// generic function 
func swap<T>(inout a: T, inout b:T) 
// generic type 
struct Pair<T>{ 
var head : T 
var tail: T 
} 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Protocol Constraints on Generic Types 
// Simple constraint 
struct Pair<T: Equatable>{ 
var head : T 
var tail: T 
} 
// A more complex one with ‘where’ 
class FooViewController<T: UIViewController 
where T: UITableViewController 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz 
T: UITextFieldDelegate>{ 
}
Protocols & Generics 
Let’s move to the Playground… 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
A Built-in Protocol: GeneratorType 
•Generators encapsulate the creation of sets of 
potentially infinite data. 
•Far more powerful than iterators, as each element 
can be computed on the fly. 
•Generators delay unnecessary computation. 
•Enormously simplify complex loops. 
•First introduced by Icon. 
•Can be seen as functions that preserve their state 
between calls. 
•This is some powerful shit! 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Implemented as a protocol 
protocol GeneratorType{ 
typealias Element 
mutating func next()->Element? 
} 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Uses of Generators 
•Recursive traversal of a directory tree 
•Traversing graphs. 
•Any case where getting the next element is expensive, such as: 
•images processed with Core Image 
•downloading data form a web server 
•etc… 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Generators 
Let’s move to the Playground… 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Another Built-in Protocol: Sequences 
•Anything that can be iterated with a GeneratorType is a Sequence. 
•Examples of sequences: Array, Dictionary, Range and Slice 
•The for in loop uses this protocol 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Another Built-in Protocol: Sequences 
protocol SequenceType{ 
/// A type whose instances can produce the elements of this 
/// sequence, in order. 
typealias Generator : GeneratorType 
/// Return a generator over the elements of this sequence. The 
/// generator's next element is the first element of the sequence. 
func generate() -> Generator 
} 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Homework 
•Try to convert the previous generators into sequences. 
•Using an infinite generator on a for loop might be…interesting. ;-) 
•Look at the implementation of Array 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Handling Sequences the Functional Way 
• Is Swift a functional language? No, but it likes to pose as one. ;-) 
• Swift has both methods and functions for handling sequences in a 
functional way. 
• Filter, map and reduce are all there. 
• Many of these you would expect to find them as methods of the 
sequence types. Instead they are implemented as global generic 
functions (as in C++). 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Sequences & Functional Programming 
Let’s move to the Playground… 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Access Control in Swift 
•Not what you’re expecting… 
•3 Levels of access 
•Private: Entities can only be accessed from the file in which they 
were defined. 
•Internal: Only from the module (usually the target) where they were 
defined. Default. 
•Public: Accesible everywhere 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Methods and Properties Private to a Class 
•How do I get those? 
•You don’t. 
•But you can fake it with protocols and functions! 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
Access Control 
Let’s move to the Playground… 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
The Road Ahead 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
¿Cómo sigo? 
•www.keepcoding.es 
•Cupón de 50% descuento icongress 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
GRACIAS www.agbo.biz 
© AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz

Mais conteúdo relacionado

Destaque

Feedback on Part 1 of the CSLP
Feedback on Part 1 of the CSLPFeedback on Part 1 of the CSLP
Feedback on Part 1 of the CSLPStephen Gilmore
 
Common Java problems when developing with Android
Common Java problems when developing with AndroidCommon Java problems when developing with Android
Common Java problems when developing with AndroidStephen Gilmore
 
Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算
Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算
Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算Xue Xin Tsai
 
Feedback on Part 1 of the Software Engineering Large Practical
Feedback on Part 1 of the Software Engineering Large PracticalFeedback on Part 1 of the Software Engineering Large Practical
Feedback on Part 1 of the Software Engineering Large PracticalStephen Gilmore
 
Quick quiz on Objective-C
Quick quiz on Objective-CQuick quiz on Objective-C
Quick quiz on Objective-CStephen Gilmore
 
Programming in Objective-C
Programming in Objective-CProgramming in Objective-C
Programming in Objective-CRyan Chung
 
Standford 2015 iOS讀書會 week1: 1.Logistics , iOS 8 Overview 2. More Xcode and S...
Standford 2015 iOS讀書會 week1: 1.Logistics , iOS 8 Overview 2. More Xcode and S...Standford 2015 iOS讀書會 week1: 1.Logistics , iOS 8 Overview 2. More Xcode and S...
Standford 2015 iOS讀書會 week1: 1.Logistics , iOS 8 Overview 2. More Xcode and S...彼得潘 Pan
 
To swiftly go where no OS has gone before
To swiftly go where no OS has gone beforeTo swiftly go where no OS has gone before
To swiftly go where no OS has gone beforePaul Ardeleanu
 
Standford 2015 week8
Standford 2015 week8Standford 2015 week8
Standford 2015 week8彼得潘 Pan
 
打造你的第一個iPhone APP
打造你的第一個iPhone APP打造你的第一個iPhone APP
打造你的第一個iPhone APP彼得潘 Pan
 
Objective-C Crash Course for Web Developers
Objective-C Crash Course for Web DevelopersObjective-C Crash Course for Web Developers
Objective-C Crash Course for Web DevelopersJoris Verbogt
 
Swift Summit: Pushing the boundaries of Swift to the Server
Swift Summit: Pushing the boundaries of Swift to the ServerSwift Summit: Pushing the boundaries of Swift to the Server
Swift Summit: Pushing the boundaries of Swift to the ServerChris Bailey
 
Object Oriented Programming in Swift Ch0 - Encapsulation
Object Oriented Programming in Swift Ch0 - EncapsulationObject Oriented Programming in Swift Ch0 - Encapsulation
Object Oriented Programming in Swift Ch0 - EncapsulationChihyang Li
 
More Stochastic Simulation Examples
More Stochastic Simulation ExamplesMore Stochastic Simulation Examples
More Stochastic Simulation ExamplesStephen Gilmore
 
Swift Tutorial Part 1. The Complete Guide For Swift Programming Language
Swift Tutorial Part 1. The Complete Guide For Swift Programming LanguageSwift Tutorial Part 1. The Complete Guide For Swift Programming Language
Swift Tutorial Part 1. The Complete Guide For Swift Programming LanguageHossam Ghareeb
 
A swift introduction to Swift
A swift introduction to SwiftA swift introduction to Swift
A swift introduction to SwiftGiordano Scalzo
 
Playgrounds: Mobile + Swift = BFF
Playgrounds: Mobile + Swift = BFFPlaygrounds: Mobile + Swift = BFF
Playgrounds: Mobile + Swift = BFFChris Bailey
 

Destaque (20)

Feedback on Part 1 of the CSLP
Feedback on Part 1 of the CSLPFeedback on Part 1 of the CSLP
Feedback on Part 1 of the CSLP
 
Common Java problems when developing with Android
Common Java problems when developing with AndroidCommon Java problems when developing with Android
Common Java problems when developing with Android
 
Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算
Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算
Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算
 
Feedback on Part 1 of the Software Engineering Large Practical
Feedback on Part 1 of the Software Engineering Large PracticalFeedback on Part 1 of the Software Engineering Large Practical
Feedback on Part 1 of the Software Engineering Large Practical
 
Quick quiz on Objective-C
Quick quiz on Objective-CQuick quiz on Objective-C
Quick quiz on Objective-C
 
Programming in Objective-C
Programming in Objective-CProgramming in Objective-C
Programming in Objective-C
 
Standford 2015 iOS讀書會 week1: 1.Logistics , iOS 8 Overview 2. More Xcode and S...
Standford 2015 iOS讀書會 week1: 1.Logistics , iOS 8 Overview 2. More Xcode and S...Standford 2015 iOS讀書會 week1: 1.Logistics , iOS 8 Overview 2. More Xcode and S...
Standford 2015 iOS讀書會 week1: 1.Logistics , iOS 8 Overview 2. More Xcode and S...
 
Swift Basic
Swift BasicSwift Basic
Swift Basic
 
To swiftly go where no OS has gone before
To swiftly go where no OS has gone beforeTo swiftly go where no OS has gone before
To swiftly go where no OS has gone before
 
Standford 2015 week8
Standford 2015 week8Standford 2015 week8
Standford 2015 week8
 
打造你的第一個iPhone APP
打造你的第一個iPhone APP打造你的第一個iPhone APP
打造你的第一個iPhone APP
 
Arrays in Objective-C
Arrays in Objective-CArrays in Objective-C
Arrays in Objective-C
 
Objective-C Crash Course for Web Developers
Objective-C Crash Course for Web DevelopersObjective-C Crash Course for Web Developers
Objective-C Crash Course for Web Developers
 
Swift-Programming Part 1
Swift-Programming Part 1Swift-Programming Part 1
Swift-Programming Part 1
 
Swift Summit: Pushing the boundaries of Swift to the Server
Swift Summit: Pushing the boundaries of Swift to the ServerSwift Summit: Pushing the boundaries of Swift to the Server
Swift Summit: Pushing the boundaries of Swift to the Server
 
Object Oriented Programming in Swift Ch0 - Encapsulation
Object Oriented Programming in Swift Ch0 - EncapsulationObject Oriented Programming in Swift Ch0 - Encapsulation
Object Oriented Programming in Swift Ch0 - Encapsulation
 
More Stochastic Simulation Examples
More Stochastic Simulation ExamplesMore Stochastic Simulation Examples
More Stochastic Simulation Examples
 
Swift Tutorial Part 1. The Complete Guide For Swift Programming Language
Swift Tutorial Part 1. The Complete Guide For Swift Programming LanguageSwift Tutorial Part 1. The Complete Guide For Swift Programming Language
Swift Tutorial Part 1. The Complete Guide For Swift Programming Language
 
A swift introduction to Swift
A swift introduction to SwiftA swift introduction to Swift
A swift introduction to Swift
 
Playgrounds: Mobile + Swift = BFF
Playgrounds: Mobile + Swift = BFFPlaygrounds: Mobile + Swift = BFF
Playgrounds: Mobile + Swift = BFF
 

Semelhante a Taller Swift - iCon

Swift - Under the Hood
Swift - Under the HoodSwift - Under the Hood
Swift - Under the HoodC4Media
 
Swift programming language
Swift programming languageSwift programming language
Swift programming languageNijo Job
 
An Introduction to GitHub for DBAs - Brent Ozar
An Introduction to GitHub for DBAs - Brent OzarAn Introduction to GitHub for DBAs - Brent Ozar
An Introduction to GitHub for DBAs - Brent OzarBrent Ozar
 
Github for Serious Business Professional
Github for Serious Business ProfessionalGithub for Serious Business Professional
Github for Serious Business Professionalzwheller
 
Node.js Deeper Dive
Node.js Deeper DiveNode.js Deeper Dive
Node.js Deeper DiveJustin Reock
 
NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET Dmytro Mindra
 
The dream BEAM - A former DevOps perspective
The dream BEAM - A former DevOps perspectiveThe dream BEAM - A former DevOps perspective
The dream BEAM - A former DevOps perspectiveJeffrey Chan
 
Emulators as an Emerging Best Practice for API Providers
Emulators as an Emerging Best Practice for API ProvidersEmulators as an Emerging Best Practice for API Providers
Emulators as an Emerging Best Practice for API ProvidersCisco DevNet
 
[ScalaMatsuri] グリー初のscalaプロダクト!チャットサービス公開までの苦労と工夫
[ScalaMatsuri] グリー初のscalaプロダクト!チャットサービス公開までの苦労と工夫[ScalaMatsuri] グリー初のscalaプロダクト!チャットサービス公開までの苦労と工夫
[ScalaMatsuri] グリー初のscalaプロダクト!チャットサービス公開までの苦労と工夫gree_tech
 
The ES6 Conundrum - All Things Open 2015
The ES6 Conundrum - All Things Open 2015The ES6 Conundrum - All Things Open 2015
The ES6 Conundrum - All Things Open 2015Christian Heilmann
 
Frederick web meetup slides
Frederick web meetup slidesFrederick web meetup slides
Frederick web meetup slidesPat Zearfoss
 
Core Java - OO Programming
Core Java - OO ProgrammingCore Java - OO Programming
Core Java - OO ProgrammingGanesh P
 
SendGrid documentation & open source projects
SendGrid documentation & open source projectsSendGrid documentation & open source projects
SendGrid documentation & open source projectsSendGrid JP
 
MWLUG - Universal Java
MWLUG  -  Universal JavaMWLUG  -  Universal Java
MWLUG - Universal JavaPhilippe Riand
 
Facilitating Idiomatic Swift with Objective-C
Facilitating Idiomatic Swift with Objective-CFacilitating Idiomatic Swift with Objective-C
Facilitating Idiomatic Swift with Objective-CAaron Taylor
 

Semelhante a Taller Swift - iCon (20)

Swift - Under the Hood
Swift - Under the HoodSwift - Under the Hood
Swift - Under the Hood
 
Swift programming language
Swift programming languageSwift programming language
Swift programming language
 
An Introduction to GitHub for DBAs - Brent Ozar
An Introduction to GitHub for DBAs - Brent OzarAn Introduction to GitHub for DBAs - Brent Ozar
An Introduction to GitHub for DBAs - Brent Ozar
 
Intro. to Git and Github
Intro. to Git and GithubIntro. to Git and Github
Intro. to Git and Github
 
Github for Serious Business Professional
Github for Serious Business ProfessionalGithub for Serious Business Professional
Github for Serious Business Professional
 
Serverless Kotlin
Serverless KotlinServerless Kotlin
Serverless Kotlin
 
slides.pdf
slides.pdfslides.pdf
slides.pdf
 
Node.js Deeper Dive
Node.js Deeper DiveNode.js Deeper Dive
Node.js Deeper Dive
 
NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET
 
Class_X_PYTHON_J.pdf
Class_X_PYTHON_J.pdfClass_X_PYTHON_J.pdf
Class_X_PYTHON_J.pdf
 
The dream BEAM - A former DevOps perspective
The dream BEAM - A former DevOps perspectiveThe dream BEAM - A former DevOps perspective
The dream BEAM - A former DevOps perspective
 
Emulators as an Emerging Best Practice for API Providers
Emulators as an Emerging Best Practice for API ProvidersEmulators as an Emerging Best Practice for API Providers
Emulators as an Emerging Best Practice for API Providers
 
[ScalaMatsuri] グリー初のscalaプロダクト!チャットサービス公開までの苦労と工夫
[ScalaMatsuri] グリー初のscalaプロダクト!チャットサービス公開までの苦労と工夫[ScalaMatsuri] グリー初のscalaプロダクト!チャットサービス公開までの苦労と工夫
[ScalaMatsuri] グリー初のscalaプロダクト!チャットサービス公開までの苦労と工夫
 
The ES6 Conundrum - All Things Open 2015
The ES6 Conundrum - All Things Open 2015The ES6 Conundrum - All Things Open 2015
The ES6 Conundrum - All Things Open 2015
 
Frederick web meetup slides
Frederick web meetup slidesFrederick web meetup slides
Frederick web meetup slides
 
Core Java - OO Programming
Core Java - OO ProgrammingCore Java - OO Programming
Core Java - OO Programming
 
Advanced angular
Advanced angularAdvanced angular
Advanced angular
 
SendGrid documentation & open source projects
SendGrid documentation & open source projectsSendGrid documentation & open source projects
SendGrid documentation & open source projects
 
MWLUG - Universal Java
MWLUG  -  Universal JavaMWLUG  -  Universal Java
MWLUG - Universal Java
 
Facilitating Idiomatic Swift with Objective-C
Facilitating Idiomatic Swift with Objective-CFacilitating Idiomatic Swift with Objective-C
Facilitating Idiomatic Swift with Objective-C
 

Mais de iCon

Apps empresariales con Genexus - iCon
Apps empresariales con Genexus - iConApps empresariales con Genexus - iCon
Apps empresariales con Genexus - iConiCon
 
Game Engine for iOS - iCon
Game Engine for iOS - iConGame Engine for iOS - iCon
Game Engine for iOS - iConiCon
 
Unos minutos con WatchKit - iCon
Unos minutos con WatchKit - iConUnos minutos con WatchKit - iCon
Unos minutos con WatchKit - iConiCon
 
Apps Design - iCon
Apps Design - iConApps Design - iCon
Apps Design - iConiCon
 
Realidad Aumentada en iOS - iCon
Realidad Aumentada en iOS - iConRealidad Aumentada en iOS - iCon
Realidad Aumentada en iOS - iConiCon
 
Stubies: Caso de éxito - iCon
Stubies: Caso de éxito - iConStubies: Caso de éxito - iCon
Stubies: Caso de éxito - iConiCon
 
HealthKit y Apple Watch - iCon 14
HealthKit y Apple Watch - iCon 14HealthKit y Apple Watch - iCon 14
HealthKit y Apple Watch - iCon 14iCon
 

Mais de iCon (7)

Apps empresariales con Genexus - iCon
Apps empresariales con Genexus - iConApps empresariales con Genexus - iCon
Apps empresariales con Genexus - iCon
 
Game Engine for iOS - iCon
Game Engine for iOS - iConGame Engine for iOS - iCon
Game Engine for iOS - iCon
 
Unos minutos con WatchKit - iCon
Unos minutos con WatchKit - iConUnos minutos con WatchKit - iCon
Unos minutos con WatchKit - iCon
 
Apps Design - iCon
Apps Design - iConApps Design - iCon
Apps Design - iCon
 
Realidad Aumentada en iOS - iCon
Realidad Aumentada en iOS - iConRealidad Aumentada en iOS - iCon
Realidad Aumentada en iOS - iCon
 
Stubies: Caso de éxito - iCon
Stubies: Caso de éxito - iConStubies: Caso de éxito - iCon
Stubies: Caso de éxito - iCon
 
HealthKit y Apple Watch - iCon 14
HealthKit y Apple Watch - iCon 14HealthKit y Apple Watch - iCon 14
HealthKit y Apple Watch - iCon 14
 

Último

Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 

Último (20)

Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 

Taller Swift - iCon

  • 1. Fast’n Furious Introduction to © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz Swift Fernando Rodriguez fernando@agbo.biz @frr149
  • 2. Objective C without the C? Not even close Objective C May I help you? © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz Swift Could not find an overload for '/' that accepts the supplied arguments!!!!
  • 3. Objective C without the C? • Not really… • Much bigger language. • Opposing philosophy: ObjC treats you as an adult, Swift behaves as a nanny. • Clearly influenced by C++ and Haskell. • If you like the compiler to yell at you, you’re gonna love Swift! ;-) • Objective C allows to go ahead without asking permission, even though you might end up asking forgiveness. • Swift is like a strict victorian teacher that will force you to ask permission for everything. © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 4. Basic Building Blocks Let’s move to the Playground… But first, make sure you have the latest (GM) version of Xcode © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 5. Functions 101 • Functions have type too. • And this can become confusing… • typealias is your friend • Parameters can have both internal and external names • Any parameter can have a default value • Functions can return several objects • Pattern matching makes this very convenient • You can’t modify an argument inside a function…unless you say please. • You can pass parameters by ref (InOut) © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 6. Functions 101 Let’s move to the Playground… © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 7. High Level Functions •Functions are a type, so we should be able to manipulate them as any other type. •Functions as parameters to other functions. •Functions as return values of other functions. © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 8. High Level Functions Let’s move to the Playground… © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 9. Functions Reloaded! •Enter the closure •It’s a block! •Syntax •Capture of lexical environment •Syntactic sugar, lotsa syntactic sugar. © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz Closure "Syntactic sugar causes cancer of the semi-colons” Alan Perlis
  • 10. Functions Reloaded: Closures! Let’s move to the Playground… © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 11. The Fear of Nil: Optionals © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 12. Who’s afraid of the big bad nil? •Objective C eats raw nils everyday for breakfast. •In Swift nils, are fearsome creatures that must be hidden inside a box. •This box is called an Optional. •It can hold a nil and some other type. •We must learn how to create optionals (put things inside the box) •and also how to get things out of it. © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 13. Optionals Let’s move to the Playground… © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 14. Decorators •Decorators are functions that modify other functions. •Common patter in other languages, such as Python. •Decorators allow to abstract away complex and ugly code that might not be always necessary. © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 15. Decorators Let’s move to the Playground… © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 16. Aggregate Types •Tuples •Structs •Classes •Enums © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 17. Aggregate types •Enums and structs are value types that are always copied, even when assigning to a new variable. •Beware of excessive copying, said ye olde C++ developer… •Classes are reference types, just like in Objective C. They are managed by ARC. •Structs have “memberwise initialisers” by default. Classes don’t. •Structs are widely used in Swift (Int, Array, Dictionary, etc…), and heavily optimised by the compiler. •Only classes have inheritance © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 18. Extending Aggregate Types •There are 2 mechanisms: •Inheritance (class only) •Extensions © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 19. Inheritance •Single inheritance only, but many protocols. •All classes can define a super class. •A class without a super class is considered a Base Class (like NSObject or NSProxy in Objective C). •Base clases actually do have a super class, called SwiftObject, but it’s hidden. •Swift classes are also Object C classes, so you can inherit from NSObject (for example) in Swift. •You can override methods and properties with override. •You can prevent inheritance or overriding with @final. © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 20. Initialization •Default initializer: init() •Structs and enums can also have initialisers •All initializers get external names by default •Never start a parameter name with the word with. This interferes with the way Swift interfaces with Objective C. •Convenience initializers are prepended with the word convenience. •Initializers are only inherited if you don’t define any designated initialiser in the subclass. © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 21. Aggregate Types Let’s move to the Playground… © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 22. Extensions 101 •Similar to Objective C categories, but without a name. •Available to enums, structs and classes •Used only to add new behaviour. Never to specialise existing behaviour (that’s what inheritance is for). •Unlike in Objective C, extensions are anonymous. •Unlike in Objective C, you cant use extensions to break inheritance. •Extensively used by Swift itself. © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 23. Extensions can •Add computed properties •Define instance and type methods •Provide new convenience inits •Make an existing type conform to a protocol •And some other stuff too… © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 24. Extensions cannot •Add stored properties •Provide new designated initialisers © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 25. Extensions 101 Let’s move to the Playground… © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 26. Protocols 101 •Protocols are the entry point to extending the language. •Extensively used by Swift itself. •Even though protocols are implemented as a type, they can be used as so. © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 27. Example Protocol protocol MyProtocol: SomeProtocol, AnotherProtocol{ // Class property class var aClassProperty: String {get} // Instance Properties var readWriteProperty: Int {set get} var readOnlyProperty: String {get} // Class Methods class func foo() -> ()->(Bool) // Instance Methods func random() -> Double } © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 28. Generics 101 •Similar to C++ templates •Generic functions •Generic types •Protocol constraints on generic types © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 29. Examples // generic function func swap<T>(inout a: T, inout b:T) // generic type struct Pair<T>{ var head : T var tail: T } © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 30. Protocol Constraints on Generic Types // Simple constraint struct Pair<T: Equatable>{ var head : T var tail: T } // A more complex one with ‘where’ class FooViewController<T: UIViewController where T: UITableViewController © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz T: UITextFieldDelegate>{ }
  • 31. Protocols & Generics Let’s move to the Playground… © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 32. A Built-in Protocol: GeneratorType •Generators encapsulate the creation of sets of potentially infinite data. •Far more powerful than iterators, as each element can be computed on the fly. •Generators delay unnecessary computation. •Enormously simplify complex loops. •First introduced by Icon. •Can be seen as functions that preserve their state between calls. •This is some powerful shit! © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 33. Implemented as a protocol protocol GeneratorType{ typealias Element mutating func next()->Element? } © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 34. Uses of Generators •Recursive traversal of a directory tree •Traversing graphs. •Any case where getting the next element is expensive, such as: •images processed with Core Image •downloading data form a web server •etc… © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 35. Generators Let’s move to the Playground… © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 36. Another Built-in Protocol: Sequences •Anything that can be iterated with a GeneratorType is a Sequence. •Examples of sequences: Array, Dictionary, Range and Slice •The for in loop uses this protocol © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 37. Another Built-in Protocol: Sequences protocol SequenceType{ /// A type whose instances can produce the elements of this /// sequence, in order. typealias Generator : GeneratorType /// Return a generator over the elements of this sequence. The /// generator's next element is the first element of the sequence. func generate() -> Generator } © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 38. Homework •Try to convert the previous generators into sequences. •Using an infinite generator on a for loop might be…interesting. ;-) •Look at the implementation of Array © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 39. Handling Sequences the Functional Way • Is Swift a functional language? No, but it likes to pose as one. ;-) • Swift has both methods and functions for handling sequences in a functional way. • Filter, map and reduce are all there. • Many of these you would expect to find them as methods of the sequence types. Instead they are implemented as global generic functions (as in C++). © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 40. Sequences & Functional Programming Let’s move to the Playground… © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 41. Access Control in Swift •Not what you’re expecting… •3 Levels of access •Private: Entities can only be accessed from the file in which they were defined. •Internal: Only from the module (usually the target) where they were defined. Default. •Public: Accesible everywhere © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 42. Methods and Properties Private to a Class •How do I get those? •You don’t. •But you can fake it with protocols and functions! © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 43. Access Control Let’s move to the Playground… © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 44. The Road Ahead © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 45. ¿Cómo sigo? •www.keepcoding.es •Cupón de 50% descuento icongress © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz
  • 46. GRACIAS www.agbo.biz © AGBO Business Architecture S.L. Todos los derechos reservados. www.agbo.biz