SlideShare a Scribd company logo
1 of 106
Download to read offline
Cocoa Design Patterns 
in Swift 
@MicheleTitolo
• New language features 
• Functional patterns 
• Patterns in Swift 
• Anti-patterns 
What we’ll cover
New language features
Tuples
Tuples group multiple values 
into a single compound value.
let http404Error = (404, "Not Found") 
println(http404Error.0)
var http200Response: (statusCode: Int, statusText: String, 
hasBody: Bool) 
http200Response.statusCode = 200 
http200Response.statusText = "OK" 
http200Response.hasBody = true
You can put any kind 
of object in a tuple
Generics
<T>
More than just an id
Abstraction
Create functions without 
declaring type
struct Stack<T> { 
var items = [T]() 
mutating func push(item: T) { 
items.append(item) 
} 
mutating func pop() -> T { 
return items.removeLast() 
} 
}
<T: Equitable>
AnyObject
...used a lot more like id
Closures
“Closures are behaviors 
with attached state” 
- Peter Norvig
Like blocks, but better!
var closure = { (params) -> returnType in 
statements 
}
let
Immutable variable
var myString: String? = someFucntion() 
if let greeting = myString { 
println(greeting) 
} 
else { 
println("Not a string") 
}
Structs + Enums
Structs: 
Pass-by-value
struct Rect { 
var origin: Point 
var size: Size 
}
Structs can have methods, and 
conform to protocols
Enums: 
also pass-by-value
Also can conform 
to protocols and have methods
enum Rank: Int { 
case Ace = 1 
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten 
case Jack, Queen, King 
func description() -> String { 
switch self { 
case .Ace: 
return "ace" 
case .Jack: 
return "jack" 
case .Queen: 
return "queen" 
case .King: 
return "king" 
default: 
return String(self.toRaw()) 
} 
} 
}
Functional Patterns
Function Passing
func printExcitedly(string: String){ 
println(string + "!!!!!!!") 
} 
var excitedFunc = printExcitedly
Pass functions into functions
func printVeryExcitedly(excitedFunction: (String) -> Void, 
message: String){ 
excitedFunction(message.uppercaseString) 
} 
printVeryExcitedly(printExcitedly, "Hello");
Return functions 
from functions
func beExcited(excitementLevel: Int) -> (String) -> Void { 
... 
}
Patterns
Composition
...because we can pass 
functions!
The OO way
class Car { 
let numWheels: Int 
let numCylinders: Int 
init (numWheels: Int, numCylinders: Int) { 
self.numWheels = numWheels 
self.numCylinders = numCylinders 
} 
} 
var newCar = Car(numWheels: 4,numCylinders: 4) 
var otherCar = Car(numWheels: 4, numCylinders: 6)
var motorcycle = ??
class Motorcycle { 
... 
}
This is not ideal
protocol Vehicle { 
var numWheels: Int {get set} 
var numCylinders: Int {get set} 
func drive() 
}
Better
How do we handle this at 
scale?
struct WheelSet { 
var wheelSize: Int 
var wheelFrictionCoefficient: Float 
} 
struct BodyType { 
var numWheels: Int 
var wheels: WheelSet 
var wheelBase: Float 
} 
enum EngineType: Int { 
case Automatic, Manual 
} 
protocol Vehicle { 
var body: BodyType {get set} 
var transmission: EngineType {get set} 
func drive(force: Float) 
func turn(speed: Float) 
}
Better
...but we can still improve
Factories
Abstract away object 
creation and composition
protocol VehicleCreator { 
func createVehicle(bodyType: BodyType, engineType: EngineType) -> Vehicle 
} 
class VehicleFactory: VehicleCreator { 
func createVehicle(bodyType: BodyType, engineType: EngineType) -> Vehicle {} 
}
protocol VehicleCreator { 
func createVehicle(bodyType: BodyType, engineType: EngineType) -> Vehicle 
} 
class VehicleFactory: VehicleCreator { 
func createVehicle(bodyType: BodyType, engineType: EngineType) -> Vehicle {} 
} 
class MotorcycleFactory: VehicleCreator { 
func createVehicle(bodyType: BodyType, engineType: EngineType) -> Vehicle {} 
}
This still looks very OO
class VehicleFactory { 
func wheelSetGenerator(wheelSize: Int, 
friction: Float) -> WheelSet { 
return WheelSet(wheelSize: wheelSize, 
wheelFrictionCoefficient: friction) 
} 
func generateBodyType(wheelCount: Int, 
wheelType: WheelSet, 
wheelBase: Float) -> (Void) -> BodyType { 
func bodyGen() -> BodyType { 
return BodyType(numWheels:wheelCount, 
wheels:wheelType, 
wheelBase:wheelBase) 
} 
return bodyGen 
} 
func createVehicle( 
bodyGenerator:(wheelCount: Int, 
wheelType: WheelSet, 
wheelBase: Float) -> BodyType, 
transmission: EngineType) -> Vehicle {} 
}
let factory: VehicleFactory = VehicleFactory() 
let motorcycleWheelSet: WheelSet = factory.wheelSetGenerator(28, friction: 0.5) 
let motorcycleBodyGen = factory.generateBodyType(2, 
wheelType:motorcycleWheelSet, 
wheelBase: 45) 
let motorcycle = factory.createVehicle(motorcycleBodyGen, transmission: .Manual) 
let electricMotorcycle = factory.createVehicle(motorcycleBodyGen, 
transmission: .Auomatic)
Factories in Swift can be 
incredibly flexible
Command
A delegate chain 
that returns a function
protocol Commander { 
func commandSomething(String) -> (Int) -> Dictionary<String, String> 
} 
class ViewController: { 
let delegate: Commander 
}
Why is this better 
than closures?
It’s more explicit
It’s more flexible
Enumeration
Not the type enum!
We have new ways of 
transforming collections
[1,2,3,4].map { 
(var number) -> Int in 
return number * number 
}
var array = [3, 2, 5, 1, 4] 
array.sort { $0 < $1 }
let array = [1, 2, 3, 4, 5] 
let reversedArray = array.reverse() 
// reversedArray = [5, 4, 3, 2, 1]
And of course, this is useful for 
more than just math
var vehicles = [suv, motorcycle, electricMotorcycle, car, truck] 
var manualVehicles = vehicles.filter { 
(var vehicle: Vehicle) -> Vehicle in 
return (vehicle.transmission == .Manual) 
} 
// manualVehicles = [motorcycle, truck]
Encapsulate better
func meanMedianMode(a: Array<Int>) -> (mean:Int, median:Int, mode:Int) { 
var mean = findMean(a) 
var median = findMedian(a) 
var mode = findMode(a) 
return (mean, median, mode) 
}
Tuples with names are 
incredibly useful
Anti-Patterns
No changes to 
handling protocols
This is the slide I was hoping 
to put something magical on
class ViewController: UIViewController, UITableViewDataSource { 
var tableView: UITableView 
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> 
UITableViewCell! { 
var cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell") as 
UITableViewCell 
if (cell == nil) { 
cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell") 
} 
cell.textLabel.text = "Hello World" 
return cell 
} 
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int { 
return 1 
} 
}
Protocols are first class citizens 
in Swift, just like in Obj-c
Tuples all the way down
Yes, you can put a tuple in a 
tuple
These are temporary data 
structures
We have better OO 
tools available
Operator overloading
Don’t overload default 
operators
func decode(json: JSON) -> User? { 
return _JSONObject(json) >>> { d in 
User.create <^> 
d["id"] >>> _JSONInt <*> 
d["name"] >>> _JSONString <*> 
d["email"] >>> _JSONString 
} 
}
Operators make code 
harder to read
Type is still important
Getting classes from 
AnyObject are kind of a pain
Still be explicit when you can
var music: [String: String] = ["AC/DC": "Hells Bells", 
"Red Hot Chili Peppers": "Californication"]
In Summary
Swift gives us new tools
But Objective-C, and its 
patterns, aren’t going away 
anytime soon
More Swift! 
• Today 11:30am 
Interoperating Swift with Lower Level Code 
by Stephan Tramer in Terrace 
• Tomorrow 1:45pm 
Functional Programming in Swift 
by Chris Eidhof in Vail
Resources 
• Swift Programming Guide from Apple 
• Design Patterns in Dynamic Programming by Peter 
Norvig 
• Erica Sadun’s many blog posts on Swift 
• Functional Programming in Swift, ebook by Objc.io 
founders (See Chris’ talk tomorrow!) 
• Instance Methods and Curried Functions in Swift by Ole 
Begemann
Thanks! 
@MicheleTitolo

More Related Content

What's hot

Falcon初印象
Falcon初印象Falcon初印象
Falcon初印象
勇浩 赖
 
Hacking parse.y (RubyKansai38)
Hacking parse.y (RubyKansai38)Hacking parse.y (RubyKansai38)
Hacking parse.y (RubyKansai38)
ujihisa
 
How to Clone Flappy Bird in Swift
How to Clone Flappy Bird in SwiftHow to Clone Flappy Bird in Swift
How to Clone Flappy Bird in Swift
Giordano Scalzo
 
F# Presentation
F# PresentationF# Presentation
F# Presentation
mrkurt
 

What's hot (20)

A Few Interesting Things in Apple's Swift Programming Language
A Few Interesting Things in Apple's Swift Programming LanguageA Few Interesting Things in Apple's Swift Programming Language
A Few Interesting Things in Apple's Swift Programming Language
 
Developing iOS apps with Swift
Developing iOS apps with SwiftDeveloping iOS apps with Swift
Developing iOS apps with Swift
 
FParsec Hands On - F#unctional Londoners 2014
FParsec Hands On -  F#unctional Londoners 2014FParsec Hands On -  F#unctional Londoners 2014
FParsec Hands On - F#unctional Londoners 2014
 
Functional Programming Patterns (NDC London 2014)
Functional Programming Patterns (NDC London 2014)Functional Programming Patterns (NDC London 2014)
Functional Programming Patterns (NDC London 2014)
 
Kotlin
KotlinKotlin
Kotlin
 
Game unleashedjavascript
Game unleashedjavascriptGame unleashedjavascript
Game unleashedjavascript
 
Falcon初印象
Falcon初印象Falcon初印象
Falcon初印象
 
JavaScript Functions
JavaScript FunctionsJavaScript Functions
JavaScript Functions
 
Zend Certification Preparation Tutorial
Zend Certification Preparation TutorialZend Certification Preparation Tutorial
Zend Certification Preparation Tutorial
 
eMan Dev Meetup: Kotlin For Android (part 03/03) 18.5.2017
eMan Dev Meetup: Kotlin For Android (part 03/03) 18.5.2017eMan Dev Meetup: Kotlin For Android (part 03/03) 18.5.2017
eMan Dev Meetup: Kotlin For Android (part 03/03) 18.5.2017
 
Zope component architechture
Zope component architechtureZope component architechture
Zope component architechture
 
Pooya Khaloo Presentation on IWMC 2015
Pooya Khaloo Presentation on IWMC 2015Pooya Khaloo Presentation on IWMC 2015
Pooya Khaloo Presentation on IWMC 2015
 
Ruby from zero to hero
Ruby from zero to heroRuby from zero to hero
Ruby from zero to hero
 
Hacking parse.y (RubyKansai38)
Hacking parse.y (RubyKansai38)Hacking parse.y (RubyKansai38)
Hacking parse.y (RubyKansai38)
 
How to Clone Flappy Bird in Swift
How to Clone Flappy Bird in SwiftHow to Clone Flappy Bird in Swift
How to Clone Flappy Bird in Swift
 
PHP Enums - PHPCon Japan 2021
PHP Enums - PHPCon Japan 2021PHP Enums - PHPCon Japan 2021
PHP Enums - PHPCon Japan 2021
 
Боремся с NPE вместе с Kotlin, Павел Шацких СберТех
Боремся с NPE вместе с Kotlin, Павел Шацких СберТехБоремся с NPE вместе с Kotlin, Павел Шацких СберТех
Боремся с NPE вместе с Kotlin, Павел Шацких СберТех
 
Swiftの関数型っぽい部分
Swiftの関数型っぽい部分Swiftの関数型っぽい部分
Swiftの関数型っぽい部分
 
PHP Performance Trivia
PHP Performance TriviaPHP Performance Trivia
PHP Performance Trivia
 
F# Presentation
F# PresentationF# Presentation
F# Presentation
 

Viewers also liked

Viewers also liked (11)

Cocoa Design Patterns
Cocoa Design PatternsCocoa Design Patterns
Cocoa Design Patterns
 
Defining DSL (Domain Specific Language) using Ruby
Defining DSL (Domain Specific Language) using RubyDefining DSL (Domain Specific Language) using Ruby
Defining DSL (Domain Specific Language) using Ruby
 
Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposiumSwift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposium
 
Bringing Swift into your Objective-C Projects
Bringing Swift into your Objective-C ProjectsBringing Swift into your Objective-C Projects
Bringing Swift into your Objective-C Projects
 
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorpSwift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
 
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
 
ノンプログラマーのためのjQuery入門
ノンプログラマーのためのjQuery入門ノンプログラマーのためのjQuery入門
ノンプログラマーのためのjQuery入門
 
Android coding guidlines
Android coding guidlinesAndroid coding guidlines
Android coding guidlines
 
みんなで Swift 復習会での談笑用スライド – 6th #minna_de_swift
みんなで Swift 復習会での談笑用スライド – 6th #minna_de_swiftみんなで Swift 復習会での談笑用スライド – 6th #minna_de_swift
みんなで Swift 復習会での談笑用スライド – 6th #minna_de_swift
 
Type-safe Web APIs with Protocol Buffers in Swift at iOSCon
Type-safe Web APIs with Protocol Buffers in Swift at iOSConType-safe Web APIs with Protocol Buffers in Swift at iOSCon
Type-safe Web APIs with Protocol Buffers in Swift at iOSCon
 
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswiftSwift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
 

Similar to Cocoa Design Patterns in Swift

pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
Hiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
Hiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
Hiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
Hiroshi Ono
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
Dmitry Buzdin
 
Is your C# optimized
Is your C# optimizedIs your C# optimized
Is your C# optimized
Woody Pewitt
 

Similar to Cocoa Design Patterns in Swift (20)

Extreme Swift
Extreme SwiftExtreme Swift
Extreme Swift
 
Scala in Places API
Scala in Places APIScala in Places API
Scala in Places API
 
Kotlin boost yourproductivity
Kotlin boost yourproductivityKotlin boost yourproductivity
Kotlin boost yourproductivity
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side Javascript
 
Functions In Scala
Functions In Scala Functions In Scala
Functions In Scala
 
Scala ntnu
Scala ntnuScala ntnu
Scala ntnu
 
Scala for curious
Scala for curiousScala for curious
Scala for curious
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Using-Python-Libraries.9485146.powerpoint.pptx
Using-Python-Libraries.9485146.powerpoint.pptxUsing-Python-Libraries.9485146.powerpoint.pptx
Using-Python-Libraries.9485146.powerpoint.pptx
 
Scala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesScala Back to Basics: Type Classes
Scala Back to Basics: Type Classes
 
Scala introduction
Scala introductionScala introduction
Scala introduction
 
Functional programming ii
Functional programming iiFunctional programming ii
Functional programming ii
 
Improving Correctness with Types Kats Conf
Improving Correctness with Types Kats ConfImproving Correctness with Types Kats Conf
Improving Correctness with Types Kats Conf
 
Is your C# optimized
Is your C# optimizedIs your C# optimized
Is your C# optimized
 
SDC - Einführung in Scala
SDC - Einführung in ScalaSDC - Einführung in Scala
SDC - Einführung in Scala
 

More from Michele Titolo

Mastering the Project File (AltConf)
Mastering the Project File (AltConf)Mastering the Project File (AltConf)
Mastering the Project File (AltConf)
Michele Titolo
 

More from Michele Titolo (20)

Writing Design Docs for Wide Audiences
Writing Design Docs for Wide AudiencesWriting Design Docs for Wide Audiences
Writing Design Docs for Wide Audiences
 
Beam Me Up: Voyaging into Big Data
Beam Me Up: Voyaging into Big DataBeam Me Up: Voyaging into Big Data
Beam Me Up: Voyaging into Big Data
 
APIs: The Good, The Bad, The Ugly
APIs: The Good, The Bad, The UglyAPIs: The Good, The Bad, The Ugly
APIs: The Good, The Bad, The Ugly
 
Tackling the Big, Impossible Project
Tackling the Big, Impossible ProjectTackling the Big, Impossible Project
Tackling the Big, Impossible Project
 
No Microservice is an Island
No Microservice is an IslandNo Microservice is an Island
No Microservice is an Island
 
From iOS to Distributed Systems
From iOS to Distributed SystemsFrom iOS to Distributed Systems
From iOS to Distributed Systems
 
More than po: Debugging in LLDB
More than po: Debugging in LLDBMore than po: Debugging in LLDB
More than po: Debugging in LLDB
 
APIs for the Mobile World
APIs for the Mobile WorldAPIs for the Mobile World
APIs for the Mobile World
 
Swift Generics in Theory and Practice
Swift Generics in Theory and PracticeSwift Generics in Theory and Practice
Swift Generics in Theory and Practice
 
Protocols promised-land-2
Protocols promised-land-2Protocols promised-land-2
Protocols promised-land-2
 
Multitasking
MultitaskingMultitasking
Multitasking
 
Making friendly-microservices
Making friendly-microservicesMaking friendly-microservices
Making friendly-microservices
 
More Than po: Debugging in LLDB @ CocoaConf SJ 2015
More Than po: Debugging in LLDB @ CocoaConf SJ 2015More Than po: Debugging in LLDB @ CocoaConf SJ 2015
More Than po: Debugging in LLDB @ CocoaConf SJ 2015
 
The Worst Code
The Worst CodeThe Worst Code
The Worst Code
 
More than `po`: Debugging in lldb
More than `po`: Debugging in lldbMore than `po`: Debugging in lldb
More than `po`: Debugging in lldb
 
Can't Handle My Scale v2
Can't Handle My Scale v2Can't Handle My Scale v2
Can't Handle My Scale v2
 
Can't Handle My Scale
Can't Handle My ScaleCan't Handle My Scale
Can't Handle My Scale
 
Mastering the Project File (AltConf)
Mastering the Project File (AltConf)Mastering the Project File (AltConf)
Mastering the Project File (AltConf)
 
APIs: The Ugly
APIs: The UglyAPIs: The Ugly
APIs: The Ugly
 
That's Not My Code!
That's Not My Code!That's Not My Code!
That's Not My Code!
 

Recently uploaded

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Recently uploaded (20)

Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 

Cocoa Design Patterns in Swift