SlideShare a Scribd company logo
1 of 142
Download to read offline
Swift & iOS 
Paul Ardeleanu 
pa@h24.io 
@pardel 
Copyleft 2014 me
CuriosMinds, Brasov, Sept 18th 2014 Slide 2
CuriosMinds, Brasov, Sept 18th 2014 Slide 3
An Android, an iOS, a Blackberry and a 
Windows Mobile developer walk into a bar… 
CuriosMinds, Brasov, Sept 18th 2014 Slide 3
An Android, an iOS, a Blackberry and a 
Windows Mobile developer walk into a bar… 
The barman looks at them & says… 
CuriosMinds, Brasov, Sept 18th 2014 Slide 3
An Android, an iOS, a Blackberry and a 
Windows Mobile developer walk into a bar… 
The barman looks at them & says… 
Gee, it must be in town 
CuriosMinds, Brasov, Sept 18th 2014 Slide 3
Swift & iOS 
Paul Ardeleanu 
pa@h24.io 
@pardel 
Copyleft 2014 me
To swiftly go where no 
other language has 
gone before
Good artists copy, 
Real artists steal
Everything is a remix 
https://www.flickr.com/photos/mugley/800999028/
The talk about that new 
programming language 
everyone talks about 
but nobody really uses…
Yet !
Swift & iOS 
Paul Ardeleanu 
pa@h24.io 
@pardel 
Copyleft 2014 me
Everything is a remix 
https://www.flickr.com/photos/mugley/800999028/
CuriosMinds, Brasov, Sept 18th 2014 Slide 1 2
CuriosMinds, Brasov, Sept 18th 2014 Slide 1 2
CuriosMinds, Brasov, Sept 18th 2014 Slide 1 3
CuriosMinds, Brasov, Sept 18th 2014 Slide 1 3 
#freeJonyIve
CuriosMinds, Brasov, Sept 18th 2014 Slide 1 4
It’s all about the users 
https://www.flickr.com/photos/wyogirl13/6455191187
It’s all about the users. 
https://www.flickr.com/photos/wyogirl13/6455191187
It’s all about the users. 
https://www.flickr.com/photos/wyogirl13/6455191187
Why?
Why? 
What?
Why? 
What? 
When?
Why? 
What? 
When? 
How?
Why?
CuriosMinds, Brasov, Sept 18th 2014 Slide 2 4
CuriosMinds, Brasov, Sept 18th 2014 Slide 2 5 
AAPL
CuriosMinds, Brasov, Sept 18th 2014 Slide 2 6 
Products
CuriosMinds, Brasov, Sept 18th 2014 Slide 2 7 
Software
CuriosMinds, Brasov, Sept 18th 2014 Slide 2 8 
App Stores
CuriosMinds, Brasov, Sept 18th 2014 Slide 2 9
Apple needs developers
‣ maximise the number of developers 
CuriosMinds, Brasov, Sept 18th 2014 Slide 
‣ keeping existing developers happy 
31 
2 more things…
‣ 30 year old language 
‣ drastically different from other languages 
‣ not entirely future-proof 
CuriosMinds, Brasov, Sept 18th 2014 Slide 
32 
Objective-C
What?
LLVM & Clang 
Apps For Good, London, June 29th 2012 Slide 3 4 Hello24 Ltd. (c) 2012
LLVM & Clang 
gcc => llvm-gcc => llvm 
Apps For Good, London, June 29th 2012 Slide 3 4 Hello24 Ltd. (c) 2012
Swift
CuriosMinds, Brasov, Sept 18th 2014 Slide 
Objective-C without the C 
36 
Swift
CuriosMinds, Brasov, Sept 18th 2014 Slide 
Objective-C without the C 
36 
Swift 
Objective-C is to Swift <=> cat is to cattle
Swift
Safety
Safety - constants vs variables 
CuriosMinds, Brasov, Sept 18th 2014 Slide 3 9
Safety - constants vs variables 
CuriosMinds, Brasov, Sept 18th 2014 Slide 3 9 
let theAnswer = 42
Safety - constants vs variables 
CuriosMinds, Brasov, Sept 18th 2014 Slide 3 9 
let theAnswer = 42 
var numberBooks = 1
Safety - constants vs variables 
CuriosMinds, Brasov, Sept 18th 2014 Slide 3 9 
let theAnswer = 42 
var numberBooks = 1 
var numberBooks: Int = 1
Safety - no implicit conversion 
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 0
Safety - no implicit conversion 
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 0 
var numberBooks = 1
Safety - no implicit conversion 
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 0 
var numberBooks = 1 
numberBooks = 2.5
Safety - no implicit conversion 
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 0 
var numberBooks = 1 
numberBooks = 2.5 ❗️
Safety - no implicit conversion 
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 0 
var numberBooks = 1 
numberBooks = 2.5 ❗️ 
numberBooks = Int(2.5)
Safety - no implicit conversion 
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 0 
var numberBooks = 1 
numberBooks = 2.5 ❗️ 
numberBooks = Int(2.5) ✔
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 1 
Safety - switch 
switch index { 
case 1: 
println("first") 
case 2, 3: 
println("second or third") 
case 4...10: 
println("top 10") 
default: 
println("others...") 
}
New idioms
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 3 
Tuples
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 3 
Tuples 
let http404Error = (404, "Not Found")
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 3 
Tuples 
let http404Error = (404, "Not Found") 
let x = 1 
let y = 2 
let point = (x, y)
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 3 
Tuples 
let http404Error = (404, "Not Found") 
let x = 1 
let y = 2 
let point = (x, y) 
point.0
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 3 
Tuples 
let http404Error = (404, "Not Found") 
let x = 1 
let y = 2 
let point = (x, y) 
point.0 
let origin = (x: 200, y: 100) 
origin.y
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 4 
Tuples
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 4 
Tuples 
// Original 
var fibonacci = 1 
var prev = 0 
while fibonacci < 100 { 
var prev_tmp = fibonacci 
fibonacci += prev 
prev = prev_tmp 
println(fibonacci) 
}
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 4 
Tuples 
// Original 
var fibonacci = 1 
var prev = 0 
while fibonacci < 100 { 
var prev_tmp = fibonacci 
fibonacci += prev 
prev = prev_tmp 
println(fibonacci) 
} 
// tuples 
var fibonacci_t = 1 
var prev_t = 0 
while fibonacci_t < 100 { 
(prev_t, fibonacci_t) = (fibonacci_t, fibonacci_t + prev_t) 
println(fibonacci_t) 
}
Functions as 
1st class citizens
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 6 
Functions 
func greetingAt(hour: Int) -> (String) -> String { 
} 
func morningGreeting(name: String) -> String { 
return "Good morning (name)" 
} 
func afternoonGreeting(name: String) -> String { 
return "Good afternoon (name)" 
} 
return hour < 12 ? morningGreeting : afternoonGreeting
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 6 
Functions 
func greetingAt(hour: Int) -> (String) -> String { 
} 
func morningGreeting(name: String) -> String { 
return "Good morning (name)" 
} 
func afternoonGreeting(name: String) -> String { 
return "Good afternoon (name)" 
} 
return hour < 12 ? morningGreeting : afternoonGreeting
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 6 
Functions 
func greetingAt(hour: Int) -> (String) -> String { 
} 
func morningGreeting(name: String) -> String { 
return "Good morning (name)" 
} 
func afternoonGreeting(name: String) -> String { 
return "Good afternoon (name)" 
} 
return hour < 12 ? morningGreeting : afternoonGreeting
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 6 
Functions 
func greetingAt(hour: Int) -> (String) -> String { 
} 
func morningGreeting(name: String) -> String { 
return "Good morning (name)" 
} 
func afternoonGreeting(name: String) -> String { 
return "Good afternoon (name)" 
} 
return hour < 12 ? morningGreeting : afternoonGreeting
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 6 
Functions 
func greetingAt(hour: Int) -> (String) -> String { 
} 
func morningGreeting(name: String) -> String { 
return "Good morning (name)" 
} 
func afternoonGreeting(name: String) -> String { 
return "Good afternoon (name)" 
} 
return hour < 12 ? morningGreeting : afternoonGreeting 
greetingAt(11)("Paul") 
greetingAt(14)("Paul")
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 6 
Functions 
func greetingAt(hour: Int) -> (String) -> String { 
} 
func morningGreeting(name: String) -> String { 
return "Good morning (name)" 
} 
func afternoonGreeting(name: String) -> String { 
return "Good afternoon (name)" 
} 
return hour < 12 ? morningGreeting : afternoonGreeting 
greetingAt(11)("Paul") 
greetingAt(14)("Paul") 
"Good morning Paul” 
"Good afternoon Paul"
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 7 
Closures
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 7 
Closures 
func greetWithMessage(name: String, message: (String) -> String) -> String 
{ 
return message(name); 
}
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 7 
Closures 
func greetWithMessage(name: String, message: (String) -> String) -> String 
{ 
return message(name); 
} 
greetWithMessage("Paul", 
{ (name: String) -> String in 
return "Good morning (name)" 
} 
)
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 7 
Closures 
func greetWithMessage(name: String, message: (String) -> String) -> String 
{ 
return message(name); 
} 
greetWithMessage("Paul", 
{ (name: String) -> String in 
return "Good morning (name)" 
} 
) 
greetWithMessage("Paul", { name in 
return "Good morning (name)" 
})
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 7 
Closures 
func greetWithMessage(name: String, message: (String) -> String) -> String 
{ 
return message(name); 
} 
greetWithMessage("Paul", 
{ (name: String) -> String in 
return "Good morning (name)" 
} 
) 
greetWithMessage("Paul", { name in 
return "Good morning (name)" 
}) 
greetWithMessage("Paul") { name in 
return "Good morning (name)" 
}
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 7 
Closures 
func greetWithMessage(name: String, message: (String) -> String) -> String 
{ 
return message(name); 
} 
greetWithMessage("Paul", 
{ (name: String) -> String in 
return "Good morning (name)" 
} 
) 
greetWithMessage("Paul", { name in 
return "Good morning (name)" 
}) 
greetWithMessage("Paul") { name in 
return "Good morning (name)" 
} 
greetWithMessage("Paul") { return "Good morning ($0)" }
CuriosMinds, Brasov, Sept 18th 2014 Slide 4 8
Tools
Playgrounds
Module 01 Slide 5 2 Hello24 Ltd. (c) 2014 
New Playground
Module 01 Slide 5 3 Hello24 Ltd. (c) 2014 
Empty Playground
Module 01 Slide 5 4 Hello24 Ltd. (c) 2014 
Playground
Module 01 Slide 5 5 Hello24 Ltd. (c) 2014 
Playground
Module 01 Slide 5 5 Hello24 Ltd. (c) 2014 
Playground
Module 01 Slide 5 5 Hello24 Ltd. (c) 2014 
Playground
Module 01 Slide 5 6 Hello24 Ltd. (c) 2014 
Fibonacci
Module 01 Slide 5 7 Hello24 Ltd. (c) 2014 
Fibonacci
Module 01 Slide 5 8 Hello24 Ltd. (c) 2014 
Fibonacci
Module 01 Slide 5 9 Hello24 Ltd. (c) 2014 
Playground - Timeline
Module 01 Slide 6 0 Hello24 Ltd. (c) 2014 
Playgrounds
Module 01 Slide Hello24 Ltd. (c) 2014 
‣ Interactive experience 
‣ Immediate feedback 
‣ Watch code progression through loops 
60 
Playgrounds
Module 01 Slide Hello24 Ltd. (c) 2014 
‣ Interactive experience 
‣ Immediate feedback 
‣ Watch code progression through loops 
‣ Easy way to 
‣ prototype 
‣ test snippets of code 
60 
Playgrounds
Module 01 Slide Hello24 Ltd. (c) 2014 
‣ Interactive experience 
‣ Immediate feedback 
‣ Watch code progression through loops 
‣ Easy way to 
‣ prototype 
‣ test snippets of code 
‣ CAREFUL! Executed automatically. 
60 
Playgrounds
Swift REPL
Module 01 Slide 6 2 Hello24 Ltd. (c) 2014 
REPL 
Read–eval–print loop
Module 01 Slide 6 2 Hello24 Ltd. (c) 2014 
REPL 
Read–eval–print loop 
$ which swift 
/usr/bin/swift
Module 01 Slide 6 2 Hello24 Ltd. (c) 2014 
REPL 
Read–eval–print loop 
$ which swift 
/usr/bin/swift 
$ swift -v 
Swift version 1.0 (swift-600.0.51.3) 
Target: x86_64-apple-darwin14.0.0 
<unknown>:0: error: the SDK 'MacOSX10.9.sdk' does not 
support Swift
Module 01 Slide 6 3 Hello24 Ltd. (c) 2014 
man swift
Module 01 Slide 6 4 Hello24 Ltd. (c) 2014 
REPL
REPL 
$ swift -v 
… 
<unknown>:0: error: the SDK 'MacOSX10.9.sdk' does not support Swift 
Module 01 Slide 6 4 Hello24 Ltd. (c) 2014
REPL 
$ swift -v 
… 
<unknown>:0: error: the SDK 'MacOSX10.9.sdk' does not support Swift 
Module 01 Slide 6 4 Hello24 Ltd. (c) 2014
REPL 
$ swift -v 
… 
<unknown>:0: error: the SDK 'MacOSX10.9.sdk' does not support Swift 
Module 01 Slide 6 4 Hello24 Ltd. (c) 2014
Module 01 Slide 6 5 Hello24 Ltd. (c) 2014 
REPL
Module 01 Slide 6 5 Hello24 Ltd. (c) 2014 
REPL 
$ swift -v
Module 01 Slide 6 5 Hello24 Ltd. (c) 2014 
REPL 
$ swift -v 
Swift version 1.1 (swift-600.0.54.4) 
Target: x86_64-apple-darwin14.0.0 
/Applications/Xcode-Beta.app/Contents/Developer/usr/bin/lldb "--repl=-target 
x86_64-apple-darwin14.0.0 -target-cpu core2 -sdk /Applications/Xcode- 
Beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ 
MacOSX10.10.sdk -color-diagnostics"
Module 01 Slide 6 5 Hello24 Ltd. (c) 2014 
REPL 
$ swift -v 
Swift version 1.1 (swift-600.0.54.4) 
Target: x86_64-apple-darwin14.0.0 
/Applications/Xcode-Beta.app/Contents/Developer/usr/bin/lldb "--repl=-target 
x86_64-apple-darwin14.0.0 -target-cpu core2 -sdk /Applications/Xcode- 
Beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ 
MacOSX10.10.sdk -color-diagnostics" 
$ swift 
Welcome to Swift! Type :help for assistance.
Module 01 Slide 6 6 Hello24 Ltd. (c) 2014 
REPL 
$ swift 
Welcome to Swift! Type :help for assistance. 
1> 1 + 2 
$R0: Int = 3 
2> "once upon a time" 
$R1: String = "once upon a time" 
3> $R1 + " there were ($R0) bears" 
$R2: String = "once upon a time there were 3 bears" 
4> println($R2) 
once upon a time there were 3 bears
When?
‣ iOS 8 released yesterday 
‣ Swift is v.1.0 as of Sept 9th 
‣ Xcode 6.0.1 released yesterday 
‣ Apps written in Swift started being accepted on Sept 9th 
CuriosMinds, Brasov, Sept 18th 2014 Slide 
68 
Now!
CuriosMinds, Brasov, Sept 18th 2014 Slide 6 9 
Resources
CuriosMinds, Brasov, Sept 18th 2014 Slide 7 0 
Resources
CuriosMinds, Brasov, Sept 18th 2014 Slide 7 1 
My Book 
pa@h24.io
CuriosMinds, Brasov, Sept 18th 2014 Slide 7 2
How?
CuriosMinds, Brasov, Sept 18th 2014 Slide 7 4 
Swift project
CuriosMinds, Brasov, Sept 18th 2014 Slide 7 5 
Bridging
CuriosMinds, Brasov, Sept 18th 2014 Slide 7 6 
Bridging
CuriosMinds, Brasov, Sept 18th 2014 Slide 7 7 
// 
// STDataObject.swift 
// 
import Foundation 
import CoreData 
class STDataObject: NSManagedObject { 
@NSManaged var uuid: String? 
@NSManaged var sync_uuid: String? 
@NSManaged var is_active: NSNumber 
class func managedObjectContext() -> NSManagedObjectContext? { 
var appDelegate = UIApplication.sharedApplication().delegate 
as AppDelegate 
return appDelegate.managedObjectContext 
} 
… 
}
CuriosMinds, Brasov, Sept 18th 2014 Slide 7 8
CuriosMinds, Brasov, Sept 18th 2014 Slide 7 8
CuriosMinds, Brasov, Sept 18th 2014 Slide 7 9
CuriosMinds, Brasov, Sept 18th 2014 Slide 7 9
Objective-C ➾ Swift
CuriosMinds, Brasov, Sept 18th 2014 Slide 8 1 
Fizz Buzz classic
CuriosMinds, Brasov, Sept 18th 2014 Slide 8 1 
Fizz Buzz classic 
let fizzBuzz = ({ (n: Int) -> String in 
if( 0 == (n % 3 + n % 5)) { return "FizzBuzz" } 
if( 0 == n % 3) { return "Fizz" } 
if( 0 == n % 5) { return "Buzz" } else { return "(n)" } 
}) 
fizzBuzz(1) 
fizzBuzz(2) 
fizzBuzz(3) 
fizzBuzz(5) 
fizzBuzz(9) 
fizzBuzz(10) 
fizzBuzz(15)
CuriosMinds, Brasov, Sept 18th 2014 Slide 8 1 
Fizz Buzz classic 
let fizzBuzz = ({ (n: Int) -> String in 
if( 0 == (n % 3 + n % 5)) { return "FizzBuzz" } 
if( 0 == n % 3) { return "Fizz" } 
if( 0 == n % 5) { return "Buzz" } else { return "(n)" } 
}) 
fizzBuzz(1) 
fizzBuzz(2) 
fizzBuzz(3) 
fizzBuzz(5) 
fizzBuzz(9) 
fizzBuzz(10) 
fizzBuzz(15) 
“1” 
“2” 
“fizz” 
“buzz” 
“fizz” 
“buzz” 
“fizzbuzz”
CuriosMinds, Brasov, Sept 18th 2014 Slide 8 2 
Swift Fizz Buzz
CuriosMinds, Brasov, Sept 18th 2014 Slide 8 2 
Swift Fizz Buzz 
let swiftFizzBuzz = ({ (aNumber: Int) -> String in 
switch (aNumber % 3, aNumber % 5 ) { 
case (0, 0): 
return "FizzBuzz" 
case (0, _): 
return "Fizz" 
case (_, 0): 
return "Buzz" 
default: 
return "(aNumber)" 
} 
}) 
swiftFizzBuzz(1) 
swiftFizzBuzz(2) 
swiftFizzBuzz(3) 
swiftFizzBuzz(5) 
swiftFizzBuzz(9) 
swiftFizzBuzz(10) 
swiftFizzBuzz(15)
CuriosMinds, Brasov, Sept 18th 2014 Slide 8 2 
Swift Fizz Buzz 
let swiftFizzBuzz = ({ (aNumber: Int) -> String in 
switch (aNumber % 3, aNumber % 5 ) { 
case (0, 0): 
return "FizzBuzz" 
case (0, _): 
return "Fizz" 
case (_, 0): 
return "Buzz" 
default: 
return "(aNumber)" 
} 
}) 
swiftFizzBuzz(1) 
swiftFizzBuzz(2) 
swiftFizzBuzz(3) 
swiftFizzBuzz(5) 
swiftFizzBuzz(9) 
swiftFizzBuzz(10) 
swiftFizzBuzz(15) 
“1” 
“2” 
“fizz” 
“buzz” 
“fizz” 
“buzz” 
“fizzbuzz”
CuriosMinds, Brasov, Sept 18th 2014 Slide 8 3 
Fizz Buzz - side by side 
let fizzBuzz = ({ (n: Int) -> String in 
if( 0 == (n % 3 + n % 5)) { return "FizzBuzz" } 
if( 0 == n % 3) { return "Fizz" } 
if( 0 == n % 5) { return "Buzz" } else { return "(n)" } 
}) 
let swiftFizzBuzz = ({ (aNumber: Int) -> String in 
switch (aNumber % 3, aNumber % 5 ) { 
case (0, 0): 
return "FizzBuzz" 
case (0, _): 
return "Fizz" 
case (_, 0): 
return "Buzz" 
default: 
return "(aNumber)" 
} 
})
Objective-C ➾ Swift
CuriosMinds, Brasov, Sept 18th 2014 Slide 8 5
Thank you! 
Paul Ardeleanu 
pa@h24.io 
@pardel 
Copyleft 2014 me

More Related Content

Viewers also liked

iOS development using Swift - Swift Basics (1)
iOS development using Swift - Swift Basics (1)iOS development using Swift - Swift Basics (1)
iOS development using Swift - Swift Basics (1)Ahmed Ali
 
A Swift Introduction to iOS 10
A Swift Introduction to iOS 10A Swift Introduction to iOS 10
A Swift Introduction to iOS 10James Sugrue
 
Swift Tutorial 2
Swift Tutorial  2Swift Tutorial  2
Swift Tutorial 2Jintin Lin
 
Getting started with Xcode
Getting started with XcodeGetting started with Xcode
Getting started with XcodeStephen 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
 
Testing Android apps with Robotium
Testing Android apps with RobotiumTesting Android apps with Robotium
Testing Android apps with RobotiumStephen Gilmore
 
Taller Swift - iCon
Taller Swift - iConTaller Swift - iCon
Taller Swift - iConiCon
 
놀아요 Swift Playgrounds
놀아요 Swift Playgrounds놀아요 Swift Playgrounds
놀아요 Swift PlaygroundsWooKyoung Noh
 
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
 
Swift Tutorial 1
Swift Tutorial 1Swift Tutorial 1
Swift Tutorial 1Jintin Lin
 
Crash Course in Objective-C
Crash Course in Objective-CCrash Course in Objective-C
Crash Course in Objective-CStephen Gilmore
 
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
 
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
 
Standford 2015 week8
Standford 2015 week8Standford 2015 week8
Standford 2015 week8彼得潘 Pan
 
Quick quiz on Objective-C
Quick quiz on Objective-CQuick quiz on Objective-C
Quick quiz on Objective-CStephen Gilmore
 
Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算
Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算
Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算Xue Xin Tsai
 

Viewers also liked (20)

iOS development using Swift - Swift Basics (1)
iOS development using Swift - Swift Basics (1)iOS development using Swift - Swift Basics (1)
iOS development using Swift - Swift Basics (1)
 
A Swift Introduction to iOS 10
A Swift Introduction to iOS 10A Swift Introduction to iOS 10
A Swift Introduction to iOS 10
 
Swift Tutorial 2
Swift Tutorial  2Swift Tutorial  2
Swift Tutorial 2
 
Getting started with Xcode
Getting started with XcodeGetting started with Xcode
Getting started with Xcode
 
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
 
Testing Android apps with Robotium
Testing Android apps with RobotiumTesting Android apps with Robotium
Testing Android apps with Robotium
 
Taller Swift - iCon
Taller Swift - iConTaller Swift - iCon
Taller Swift - iCon
 
놀아요 Swift Playgrounds
놀아요 Swift Playgrounds놀아요 Swift Playgrounds
놀아요 Swift Playgrounds
 
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
 
Swift Tutorial 1
Swift Tutorial 1Swift Tutorial 1
Swift Tutorial 1
 
Crash Course in Objective-C
Crash Course in Objective-CCrash Course in Objective-C
Crash Course in Objective-C
 
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
 
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
 
Standford 2015 week8
Standford 2015 week8Standford 2015 week8
Standford 2015 week8
 
Quick quiz on Objective-C
Quick quiz on Objective-CQuick quiz on Objective-C
Quick quiz on Objective-C
 
SWIFT 3
SWIFT 3SWIFT 3
SWIFT 3
 
Arrays in Objective-C
Arrays in Objective-CArrays in Objective-C
Arrays in Objective-C
 
Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算
Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算
Swifter Taipei 聊聊 Swift 遊樂場、變數常數、數字與運算
 

Similar to To swiftly go where no OS has gone before

Let's Do Some Upfront Design - WindyCityRails 2014
Let's Do Some Upfront Design - WindyCityRails 2014Let's Do Some Upfront Design - WindyCityRails 2014
Let's Do Some Upfront Design - WindyCityRails 2014Mark Menard
 
Perl in the Internet of Things
Perl in the Internet of ThingsPerl in the Internet of Things
Perl in the Internet of ThingsDave Cross
 
Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim PerlchinaPerl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim Perlchinaguestcf9240
 
Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim PerlchinaPerl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim PerlchinaLin Yo-An
 
Iterators, ArrayAccess & Countable (Oh My!) - Madison PHP 2014
Iterators, ArrayAccess & Countable (Oh My!) - Madison PHP 2014Iterators, ArrayAccess & Countable (Oh My!) - Madison PHP 2014
Iterators, ArrayAccess & Countable (Oh My!) - Madison PHP 2014Sandy Smith
 
What's new in Perl 5.10?
What's new in Perl 5.10?What's new in Perl 5.10?
What's new in Perl 5.10?acme
 

Similar to To swiftly go where no OS has gone before (8)

Commander
CommanderCommander
Commander
 
Let's Do Some Upfront Design - WindyCityRails 2014
Let's Do Some Upfront Design - WindyCityRails 2014Let's Do Some Upfront Design - WindyCityRails 2014
Let's Do Some Upfront Design - WindyCityRails 2014
 
Perl in the Internet of Things
Perl in the Internet of ThingsPerl in the Internet of Things
Perl in the Internet of Things
 
Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim PerlchinaPerl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim Perlchina
 
Perl Moderno
Perl ModernoPerl Moderno
Perl Moderno
 
Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim PerlchinaPerl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim Perlchina
 
Iterators, ArrayAccess & Countable (Oh My!) - Madison PHP 2014
Iterators, ArrayAccess & Countable (Oh My!) - Madison PHP 2014Iterators, ArrayAccess & Countable (Oh My!) - Madison PHP 2014
Iterators, ArrayAccess & Countable (Oh My!) - Madison PHP 2014
 
What's new in Perl 5.10?
What's new in Perl 5.10?What's new in Perl 5.10?
What's new in Perl 5.10?
 

More from Paul Ardeleanu

Test or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOSTest or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOSPaul Ardeleanu
 
Test or Go Fishing - A guide on how to write better Swift for iOS
Test or Go Fishing - A guide on how to write better Swift for iOSTest or Go Fishing - A guide on how to write better Swift for iOS
Test or Go Fishing - A guide on how to write better Swift for iOSPaul Ardeleanu
 
Test or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOSTest or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOSPaul Ardeleanu
 
Architecting apps - Can we write better code by planning ahead?
Architecting apps - Can we write better code by planning ahead?Architecting apps - Can we write better code by planning ahead?
Architecting apps - Can we write better code by planning ahead?Paul Ardeleanu
 
iOSNeXT.ro - 10 reasons you'll love Swift - Paul Ardeleanu
iOSNeXT.ro - 10 reasons you'll love Swift - Paul ArdeleanuiOSNeXT.ro - 10 reasons you'll love Swift - Paul Ardeleanu
iOSNeXT.ro - 10 reasons you'll love Swift - Paul ArdeleanuPaul Ardeleanu
 
iOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan Korosi
iOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan KorosiiOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan Korosi
iOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan KorosiPaul Ardeleanu
 
iOSNeXT.ro - Catwalk15 - Mark Filipas
iOSNeXT.ro - Catwalk15 - Mark FilipasiOSNeXT.ro - Catwalk15 - Mark Filipas
iOSNeXT.ro - Catwalk15 - Mark FilipasPaul Ardeleanu
 
iOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru Iliescu
iOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru IliescuiOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru Iliescu
iOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru IliescuPaul Ardeleanu
 
7 things one should learn from iOS
7 things one should learn from iOS7 things one should learn from iOS
7 things one should learn from iOSPaul Ardeleanu
 
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014Paul Ardeleanu
 
Prototyping saves your bacon
Prototyping saves your baconPrototyping saves your bacon
Prototyping saves your baconPaul Ardeleanu
 
My talk @ Timisoara Mobile Development Group February Meetup
My talk @ Timisoara Mobile Development Group February MeetupMy talk @ Timisoara Mobile Development Group February Meetup
My talk @ Timisoara Mobile Development Group February MeetupPaul Ardeleanu
 
How to prototype your mobile apps
How to prototype your mobile appsHow to prototype your mobile apps
How to prototype your mobile appsPaul Ardeleanu
 
Prototyping your iPhone/iPad app
Prototyping your iPhone/iPad appPrototyping your iPhone/iPad app
Prototyping your iPhone/iPad appPaul Ardeleanu
 
There is no spoon - iPhone vs. iPad
There is no spoon - iPhone vs. iPadThere is no spoon - iPhone vs. iPad
There is no spoon - iPhone vs. iPadPaul Ardeleanu
 
The Adventure - From idea to the iPhone
The Adventure - From idea to the iPhoneThe Adventure - From idea to the iPhone
The Adventure - From idea to the iPhonePaul Ardeleanu
 

More from Paul Ardeleanu (20)

Test or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOSTest or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOS
 
Test or Go Fishing - A guide on how to write better Swift for iOS
Test or Go Fishing - A guide on how to write better Swift for iOSTest or Go Fishing - A guide on how to write better Swift for iOS
Test or Go Fishing - A guide on how to write better Swift for iOS
 
Prototype your dream
Prototype your dreamPrototype your dream
Prototype your dream
 
Test or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOSTest or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOS
 
Architecting apps - Can we write better code by planning ahead?
Architecting apps - Can we write better code by planning ahead?Architecting apps - Can we write better code by planning ahead?
Architecting apps - Can we write better code by planning ahead?
 
iOSNeXT.ro - 10 reasons you'll love Swift - Paul Ardeleanu
iOSNeXT.ro - 10 reasons you'll love Swift - Paul ArdeleanuiOSNeXT.ro - 10 reasons you'll love Swift - Paul Ardeleanu
iOSNeXT.ro - 10 reasons you'll love Swift - Paul Ardeleanu
 
iOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan Korosi
iOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan KorosiiOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan Korosi
iOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan Korosi
 
iOSNeXT.ro - Catwalk15 - Mark Filipas
iOSNeXT.ro - Catwalk15 - Mark FilipasiOSNeXT.ro - Catwalk15 - Mark Filipas
iOSNeXT.ro - Catwalk15 - Mark Filipas
 
iOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru Iliescu
iOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru IliescuiOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru Iliescu
iOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru Iliescu
 
7 things one should learn from iOS
7 things one should learn from iOS7 things one should learn from iOS
7 things one should learn from iOS
 
iOScon 2014
iOScon 2014 iOScon 2014
iOScon 2014
 
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
 
Prototyping saves your bacon
Prototyping saves your baconPrototyping saves your bacon
Prototyping saves your bacon
 
My talk @ Timisoara Mobile Development Group February Meetup
My talk @ Timisoara Mobile Development Group February MeetupMy talk @ Timisoara Mobile Development Group February Meetup
My talk @ Timisoara Mobile Development Group February Meetup
 
How to prototype your mobile apps
How to prototype your mobile appsHow to prototype your mobile apps
How to prototype your mobile apps
 
Native vs html5
Native vs html5Native vs html5
Native vs html5
 
Prototyping your iPhone/iPad app
Prototyping your iPhone/iPad appPrototyping your iPhone/iPad app
Prototyping your iPhone/iPad app
 
Whats new in iOS5
Whats new in iOS5Whats new in iOS5
Whats new in iOS5
 
There is no spoon - iPhone vs. iPad
There is no spoon - iPhone vs. iPadThere is no spoon - iPhone vs. iPad
There is no spoon - iPhone vs. iPad
 
The Adventure - From idea to the iPhone
The Adventure - From idea to the iPhoneThe Adventure - From idea to the iPhone
The Adventure - From idea to the iPhone
 

Recently uploaded

ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityVictorSzoltysek
 
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.pdfOrbitshub
 
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 Ontologyjohnbeverley2021
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard37
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
API Governance and Monetization - The evolution of API governance
API Governance and Monetization -  The evolution of API governanceAPI Governance and Monetization -  The evolution of API governance
API Governance and Monetization - The evolution of API governanceWSO2
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
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 TerraformAndrey Devyatkin
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
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 businesspanagenda
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
How to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cfHow to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cfdanishmna97
 
Design and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data ScienceDesign and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data SciencePaolo Missier
 
Quantum Leap in Next-Generation Computing
Quantum Leap in Next-Generation ComputingQuantum Leap in Next-Generation Computing
Quantum Leap in Next-Generation ComputingWSO2
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
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 WoodJuan lago vázquez
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 

Recently uploaded (20)

ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps Productivity
 
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
 
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
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
API Governance and Monetization - The evolution of API governance
API Governance and Monetization -  The evolution of API governanceAPI Governance and Monetization -  The evolution of API governance
API Governance and Monetization - The evolution of API governance
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
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
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
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
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
How to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cfHow to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cf
 
Design and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data ScienceDesign and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data Science
 
Quantum Leap in Next-Generation Computing
Quantum Leap in Next-Generation ComputingQuantum Leap in Next-Generation Computing
Quantum Leap in Next-Generation Computing
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
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
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 

To swiftly go where no OS has gone before

  • 1. Swift & iOS Paul Ardeleanu pa@h24.io @pardel Copyleft 2014 me
  • 2. CuriosMinds, Brasov, Sept 18th 2014 Slide 2
  • 3. CuriosMinds, Brasov, Sept 18th 2014 Slide 3
  • 4. An Android, an iOS, a Blackberry and a Windows Mobile developer walk into a bar… CuriosMinds, Brasov, Sept 18th 2014 Slide 3
  • 5. An Android, an iOS, a Blackberry and a Windows Mobile developer walk into a bar… The barman looks at them & says… CuriosMinds, Brasov, Sept 18th 2014 Slide 3
  • 6. An Android, an iOS, a Blackberry and a Windows Mobile developer walk into a bar… The barman looks at them & says… Gee, it must be in town CuriosMinds, Brasov, Sept 18th 2014 Slide 3
  • 7. Swift & iOS Paul Ardeleanu pa@h24.io @pardel Copyleft 2014 me
  • 8. To swiftly go where no other language has gone before
  • 9. Good artists copy, Real artists steal
  • 10. Everything is a remix https://www.flickr.com/photos/mugley/800999028/
  • 11. The talk about that new programming language everyone talks about but nobody really uses…
  • 12. Yet !
  • 13. Swift & iOS Paul Ardeleanu pa@h24.io @pardel Copyleft 2014 me
  • 14. Everything is a remix https://www.flickr.com/photos/mugley/800999028/
  • 15. CuriosMinds, Brasov, Sept 18th 2014 Slide 1 2
  • 16. CuriosMinds, Brasov, Sept 18th 2014 Slide 1 2
  • 17. CuriosMinds, Brasov, Sept 18th 2014 Slide 1 3
  • 18. CuriosMinds, Brasov, Sept 18th 2014 Slide 1 3 #freeJonyIve
  • 19. CuriosMinds, Brasov, Sept 18th 2014 Slide 1 4
  • 20. It’s all about the users https://www.flickr.com/photos/wyogirl13/6455191187
  • 21. It’s all about the users. https://www.flickr.com/photos/wyogirl13/6455191187
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28. It’s all about the users. https://www.flickr.com/photos/wyogirl13/6455191187
  • 29.
  • 30. Why?
  • 34. Why?
  • 35. CuriosMinds, Brasov, Sept 18th 2014 Slide 2 4
  • 36. CuriosMinds, Brasov, Sept 18th 2014 Slide 2 5 AAPL
  • 37. CuriosMinds, Brasov, Sept 18th 2014 Slide 2 6 Products
  • 38. CuriosMinds, Brasov, Sept 18th 2014 Slide 2 7 Software
  • 39. CuriosMinds, Brasov, Sept 18th 2014 Slide 2 8 App Stores
  • 40. CuriosMinds, Brasov, Sept 18th 2014 Slide 2 9
  • 42. ‣ maximise the number of developers CuriosMinds, Brasov, Sept 18th 2014 Slide ‣ keeping existing developers happy 31 2 more things…
  • 43. ‣ 30 year old language ‣ drastically different from other languages ‣ not entirely future-proof CuriosMinds, Brasov, Sept 18th 2014 Slide 32 Objective-C
  • 44. What?
  • 45. LLVM & Clang Apps For Good, London, June 29th 2012 Slide 3 4 Hello24 Ltd. (c) 2012
  • 46. LLVM & Clang gcc => llvm-gcc => llvm Apps For Good, London, June 29th 2012 Slide 3 4 Hello24 Ltd. (c) 2012
  • 47. Swift
  • 48. CuriosMinds, Brasov, Sept 18th 2014 Slide Objective-C without the C 36 Swift
  • 49. CuriosMinds, Brasov, Sept 18th 2014 Slide Objective-C without the C 36 Swift Objective-C is to Swift <=> cat is to cattle
  • 50. Swift
  • 52. Safety - constants vs variables CuriosMinds, Brasov, Sept 18th 2014 Slide 3 9
  • 53. Safety - constants vs variables CuriosMinds, Brasov, Sept 18th 2014 Slide 3 9 let theAnswer = 42
  • 54. Safety - constants vs variables CuriosMinds, Brasov, Sept 18th 2014 Slide 3 9 let theAnswer = 42 var numberBooks = 1
  • 55. Safety - constants vs variables CuriosMinds, Brasov, Sept 18th 2014 Slide 3 9 let theAnswer = 42 var numberBooks = 1 var numberBooks: Int = 1
  • 56. Safety - no implicit conversion CuriosMinds, Brasov, Sept 18th 2014 Slide 4 0
  • 57. Safety - no implicit conversion CuriosMinds, Brasov, Sept 18th 2014 Slide 4 0 var numberBooks = 1
  • 58. Safety - no implicit conversion CuriosMinds, Brasov, Sept 18th 2014 Slide 4 0 var numberBooks = 1 numberBooks = 2.5
  • 59. Safety - no implicit conversion CuriosMinds, Brasov, Sept 18th 2014 Slide 4 0 var numberBooks = 1 numberBooks = 2.5 ❗️
  • 60. Safety - no implicit conversion CuriosMinds, Brasov, Sept 18th 2014 Slide 4 0 var numberBooks = 1 numberBooks = 2.5 ❗️ numberBooks = Int(2.5)
  • 61. Safety - no implicit conversion CuriosMinds, Brasov, Sept 18th 2014 Slide 4 0 var numberBooks = 1 numberBooks = 2.5 ❗️ numberBooks = Int(2.5) ✔
  • 62. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 1 Safety - switch switch index { case 1: println("first") case 2, 3: println("second or third") case 4...10: println("top 10") default: println("others...") }
  • 64. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 3 Tuples
  • 65. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 3 Tuples let http404Error = (404, "Not Found")
  • 66. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 3 Tuples let http404Error = (404, "Not Found") let x = 1 let y = 2 let point = (x, y)
  • 67. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 3 Tuples let http404Error = (404, "Not Found") let x = 1 let y = 2 let point = (x, y) point.0
  • 68. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 3 Tuples let http404Error = (404, "Not Found") let x = 1 let y = 2 let point = (x, y) point.0 let origin = (x: 200, y: 100) origin.y
  • 69. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 4 Tuples
  • 70. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 4 Tuples // Original var fibonacci = 1 var prev = 0 while fibonacci < 100 { var prev_tmp = fibonacci fibonacci += prev prev = prev_tmp println(fibonacci) }
  • 71. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 4 Tuples // Original var fibonacci = 1 var prev = 0 while fibonacci < 100 { var prev_tmp = fibonacci fibonacci += prev prev = prev_tmp println(fibonacci) } // tuples var fibonacci_t = 1 var prev_t = 0 while fibonacci_t < 100 { (prev_t, fibonacci_t) = (fibonacci_t, fibonacci_t + prev_t) println(fibonacci_t) }
  • 72. Functions as 1st class citizens
  • 73. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 6 Functions func greetingAt(hour: Int) -> (String) -> String { } func morningGreeting(name: String) -> String { return "Good morning (name)" } func afternoonGreeting(name: String) -> String { return "Good afternoon (name)" } return hour < 12 ? morningGreeting : afternoonGreeting
  • 74. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 6 Functions func greetingAt(hour: Int) -> (String) -> String { } func morningGreeting(name: String) -> String { return "Good morning (name)" } func afternoonGreeting(name: String) -> String { return "Good afternoon (name)" } return hour < 12 ? morningGreeting : afternoonGreeting
  • 75. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 6 Functions func greetingAt(hour: Int) -> (String) -> String { } func morningGreeting(name: String) -> String { return "Good morning (name)" } func afternoonGreeting(name: String) -> String { return "Good afternoon (name)" } return hour < 12 ? morningGreeting : afternoonGreeting
  • 76. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 6 Functions func greetingAt(hour: Int) -> (String) -> String { } func morningGreeting(name: String) -> String { return "Good morning (name)" } func afternoonGreeting(name: String) -> String { return "Good afternoon (name)" } return hour < 12 ? morningGreeting : afternoonGreeting
  • 77. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 6 Functions func greetingAt(hour: Int) -> (String) -> String { } func morningGreeting(name: String) -> String { return "Good morning (name)" } func afternoonGreeting(name: String) -> String { return "Good afternoon (name)" } return hour < 12 ? morningGreeting : afternoonGreeting greetingAt(11)("Paul") greetingAt(14)("Paul")
  • 78. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 6 Functions func greetingAt(hour: Int) -> (String) -> String { } func morningGreeting(name: String) -> String { return "Good morning (name)" } func afternoonGreeting(name: String) -> String { return "Good afternoon (name)" } return hour < 12 ? morningGreeting : afternoonGreeting greetingAt(11)("Paul") greetingAt(14)("Paul") "Good morning Paul” "Good afternoon Paul"
  • 79. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 7 Closures
  • 80. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 7 Closures func greetWithMessage(name: String, message: (String) -> String) -> String { return message(name); }
  • 81. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 7 Closures func greetWithMessage(name: String, message: (String) -> String) -> String { return message(name); } greetWithMessage("Paul", { (name: String) -> String in return "Good morning (name)" } )
  • 82. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 7 Closures func greetWithMessage(name: String, message: (String) -> String) -> String { return message(name); } greetWithMessage("Paul", { (name: String) -> String in return "Good morning (name)" } ) greetWithMessage("Paul", { name in return "Good morning (name)" })
  • 83. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 7 Closures func greetWithMessage(name: String, message: (String) -> String) -> String { return message(name); } greetWithMessage("Paul", { (name: String) -> String in return "Good morning (name)" } ) greetWithMessage("Paul", { name in return "Good morning (name)" }) greetWithMessage("Paul") { name in return "Good morning (name)" }
  • 84. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 7 Closures func greetWithMessage(name: String, message: (String) -> String) -> String { return message(name); } greetWithMessage("Paul", { (name: String) -> String in return "Good morning (name)" } ) greetWithMessage("Paul", { name in return "Good morning (name)" }) greetWithMessage("Paul") { name in return "Good morning (name)" } greetWithMessage("Paul") { return "Good morning ($0)" }
  • 85. CuriosMinds, Brasov, Sept 18th 2014 Slide 4 8
  • 86. Tools
  • 87.
  • 89. Module 01 Slide 5 2 Hello24 Ltd. (c) 2014 New Playground
  • 90. Module 01 Slide 5 3 Hello24 Ltd. (c) 2014 Empty Playground
  • 91. Module 01 Slide 5 4 Hello24 Ltd. (c) 2014 Playground
  • 92. Module 01 Slide 5 5 Hello24 Ltd. (c) 2014 Playground
  • 93. Module 01 Slide 5 5 Hello24 Ltd. (c) 2014 Playground
  • 94. Module 01 Slide 5 5 Hello24 Ltd. (c) 2014 Playground
  • 95. Module 01 Slide 5 6 Hello24 Ltd. (c) 2014 Fibonacci
  • 96. Module 01 Slide 5 7 Hello24 Ltd. (c) 2014 Fibonacci
  • 97. Module 01 Slide 5 8 Hello24 Ltd. (c) 2014 Fibonacci
  • 98. Module 01 Slide 5 9 Hello24 Ltd. (c) 2014 Playground - Timeline
  • 99. Module 01 Slide 6 0 Hello24 Ltd. (c) 2014 Playgrounds
  • 100. Module 01 Slide Hello24 Ltd. (c) 2014 ‣ Interactive experience ‣ Immediate feedback ‣ Watch code progression through loops 60 Playgrounds
  • 101. Module 01 Slide Hello24 Ltd. (c) 2014 ‣ Interactive experience ‣ Immediate feedback ‣ Watch code progression through loops ‣ Easy way to ‣ prototype ‣ test snippets of code 60 Playgrounds
  • 102. Module 01 Slide Hello24 Ltd. (c) 2014 ‣ Interactive experience ‣ Immediate feedback ‣ Watch code progression through loops ‣ Easy way to ‣ prototype ‣ test snippets of code ‣ CAREFUL! Executed automatically. 60 Playgrounds
  • 104. Module 01 Slide 6 2 Hello24 Ltd. (c) 2014 REPL Read–eval–print loop
  • 105. Module 01 Slide 6 2 Hello24 Ltd. (c) 2014 REPL Read–eval–print loop $ which swift /usr/bin/swift
  • 106. Module 01 Slide 6 2 Hello24 Ltd. (c) 2014 REPL Read–eval–print loop $ which swift /usr/bin/swift $ swift -v Swift version 1.0 (swift-600.0.51.3) Target: x86_64-apple-darwin14.0.0 <unknown>:0: error: the SDK 'MacOSX10.9.sdk' does not support Swift
  • 107. Module 01 Slide 6 3 Hello24 Ltd. (c) 2014 man swift
  • 108. Module 01 Slide 6 4 Hello24 Ltd. (c) 2014 REPL
  • 109. REPL $ swift -v … <unknown>:0: error: the SDK 'MacOSX10.9.sdk' does not support Swift Module 01 Slide 6 4 Hello24 Ltd. (c) 2014
  • 110. REPL $ swift -v … <unknown>:0: error: the SDK 'MacOSX10.9.sdk' does not support Swift Module 01 Slide 6 4 Hello24 Ltd. (c) 2014
  • 111. REPL $ swift -v … <unknown>:0: error: the SDK 'MacOSX10.9.sdk' does not support Swift Module 01 Slide 6 4 Hello24 Ltd. (c) 2014
  • 112. Module 01 Slide 6 5 Hello24 Ltd. (c) 2014 REPL
  • 113. Module 01 Slide 6 5 Hello24 Ltd. (c) 2014 REPL $ swift -v
  • 114. Module 01 Slide 6 5 Hello24 Ltd. (c) 2014 REPL $ swift -v Swift version 1.1 (swift-600.0.54.4) Target: x86_64-apple-darwin14.0.0 /Applications/Xcode-Beta.app/Contents/Developer/usr/bin/lldb "--repl=-target x86_64-apple-darwin14.0.0 -target-cpu core2 -sdk /Applications/Xcode- Beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ MacOSX10.10.sdk -color-diagnostics"
  • 115. Module 01 Slide 6 5 Hello24 Ltd. (c) 2014 REPL $ swift -v Swift version 1.1 (swift-600.0.54.4) Target: x86_64-apple-darwin14.0.0 /Applications/Xcode-Beta.app/Contents/Developer/usr/bin/lldb "--repl=-target x86_64-apple-darwin14.0.0 -target-cpu core2 -sdk /Applications/Xcode- Beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ MacOSX10.10.sdk -color-diagnostics" $ swift Welcome to Swift! Type :help for assistance.
  • 116. Module 01 Slide 6 6 Hello24 Ltd. (c) 2014 REPL $ swift Welcome to Swift! Type :help for assistance. 1> 1 + 2 $R0: Int = 3 2> "once upon a time" $R1: String = "once upon a time" 3> $R1 + " there were ($R0) bears" $R2: String = "once upon a time there were 3 bears" 4> println($R2) once upon a time there were 3 bears
  • 117. When?
  • 118. ‣ iOS 8 released yesterday ‣ Swift is v.1.0 as of Sept 9th ‣ Xcode 6.0.1 released yesterday ‣ Apps written in Swift started being accepted on Sept 9th CuriosMinds, Brasov, Sept 18th 2014 Slide 68 Now!
  • 119. CuriosMinds, Brasov, Sept 18th 2014 Slide 6 9 Resources
  • 120. CuriosMinds, Brasov, Sept 18th 2014 Slide 7 0 Resources
  • 121. CuriosMinds, Brasov, Sept 18th 2014 Slide 7 1 My Book pa@h24.io
  • 122. CuriosMinds, Brasov, Sept 18th 2014 Slide 7 2
  • 123. How?
  • 124. CuriosMinds, Brasov, Sept 18th 2014 Slide 7 4 Swift project
  • 125. CuriosMinds, Brasov, Sept 18th 2014 Slide 7 5 Bridging
  • 126. CuriosMinds, Brasov, Sept 18th 2014 Slide 7 6 Bridging
  • 127. CuriosMinds, Brasov, Sept 18th 2014 Slide 7 7 // // STDataObject.swift // import Foundation import CoreData class STDataObject: NSManagedObject { @NSManaged var uuid: String? @NSManaged var sync_uuid: String? @NSManaged var is_active: NSNumber class func managedObjectContext() -> NSManagedObjectContext? { var appDelegate = UIApplication.sharedApplication().delegate as AppDelegate return appDelegate.managedObjectContext } … }
  • 128. CuriosMinds, Brasov, Sept 18th 2014 Slide 7 8
  • 129. CuriosMinds, Brasov, Sept 18th 2014 Slide 7 8
  • 130. CuriosMinds, Brasov, Sept 18th 2014 Slide 7 9
  • 131. CuriosMinds, Brasov, Sept 18th 2014 Slide 7 9
  • 133. CuriosMinds, Brasov, Sept 18th 2014 Slide 8 1 Fizz Buzz classic
  • 134. CuriosMinds, Brasov, Sept 18th 2014 Slide 8 1 Fizz Buzz classic let fizzBuzz = ({ (n: Int) -> String in if( 0 == (n % 3 + n % 5)) { return "FizzBuzz" } if( 0 == n % 3) { return "Fizz" } if( 0 == n % 5) { return "Buzz" } else { return "(n)" } }) fizzBuzz(1) fizzBuzz(2) fizzBuzz(3) fizzBuzz(5) fizzBuzz(9) fizzBuzz(10) fizzBuzz(15)
  • 135. CuriosMinds, Brasov, Sept 18th 2014 Slide 8 1 Fizz Buzz classic let fizzBuzz = ({ (n: Int) -> String in if( 0 == (n % 3 + n % 5)) { return "FizzBuzz" } if( 0 == n % 3) { return "Fizz" } if( 0 == n % 5) { return "Buzz" } else { return "(n)" } }) fizzBuzz(1) fizzBuzz(2) fizzBuzz(3) fizzBuzz(5) fizzBuzz(9) fizzBuzz(10) fizzBuzz(15) “1” “2” “fizz” “buzz” “fizz” “buzz” “fizzbuzz”
  • 136. CuriosMinds, Brasov, Sept 18th 2014 Slide 8 2 Swift Fizz Buzz
  • 137. CuriosMinds, Brasov, Sept 18th 2014 Slide 8 2 Swift Fizz Buzz let swiftFizzBuzz = ({ (aNumber: Int) -> String in switch (aNumber % 3, aNumber % 5 ) { case (0, 0): return "FizzBuzz" case (0, _): return "Fizz" case (_, 0): return "Buzz" default: return "(aNumber)" } }) swiftFizzBuzz(1) swiftFizzBuzz(2) swiftFizzBuzz(3) swiftFizzBuzz(5) swiftFizzBuzz(9) swiftFizzBuzz(10) swiftFizzBuzz(15)
  • 138. CuriosMinds, Brasov, Sept 18th 2014 Slide 8 2 Swift Fizz Buzz let swiftFizzBuzz = ({ (aNumber: Int) -> String in switch (aNumber % 3, aNumber % 5 ) { case (0, 0): return "FizzBuzz" case (0, _): return "Fizz" case (_, 0): return "Buzz" default: return "(aNumber)" } }) swiftFizzBuzz(1) swiftFizzBuzz(2) swiftFizzBuzz(3) swiftFizzBuzz(5) swiftFizzBuzz(9) swiftFizzBuzz(10) swiftFizzBuzz(15) “1” “2” “fizz” “buzz” “fizz” “buzz” “fizzbuzz”
  • 139. CuriosMinds, Brasov, Sept 18th 2014 Slide 8 3 Fizz Buzz - side by side let fizzBuzz = ({ (n: Int) -> String in if( 0 == (n % 3 + n % 5)) { return "FizzBuzz" } if( 0 == n % 3) { return "Fizz" } if( 0 == n % 5) { return "Buzz" } else { return "(n)" } }) let swiftFizzBuzz = ({ (aNumber: Int) -> String in switch (aNumber % 3, aNumber % 5 ) { case (0, 0): return "FizzBuzz" case (0, _): return "Fizz" case (_, 0): return "Buzz" default: return "(aNumber)" } })
  • 141. CuriosMinds, Brasov, Sept 18th 2014 Slide 8 5
  • 142. Thank you! Paul Ardeleanu pa@h24.io @pardel Copyleft 2014 me