SlideShare a Scribd company logo
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 10
James Sugrue
 
Swift Tutorial 2
Swift Tutorial  2Swift Tutorial  2
Swift Tutorial 2
Jintin Lin
 
Getting started with Xcode
Getting started with XcodeGetting started with Xcode
Getting started with Xcode
Stephen 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 Android
Stephen 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 - iCon
iCon
 
놀아요 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 CSLP
Stephen Gilmore
 
Swift Tutorial 1
Swift Tutorial 1Swift Tutorial 1
Swift Tutorial 1
Jintin Lin
 
Crash Course in Objective-C
Crash Course in Objective-CCrash Course in Objective-C
Crash Course in Objective-C
Stephen 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 Practical
Stephen Gilmore
 
Programming in Objective-C
Programming in Objective-CProgramming in Objective-C
Programming in Objective-C
Ryan 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
 
Swift Basic
Swift BasicSwift Basic
Swift Basic
Ryan Chung
 
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-C
Stephen Gilmore
 
Arrays in Objective-C
Arrays in Objective-CArrays in Objective-C
Arrays in Objective-C
Stephen 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

Commander
CommanderCommander
Commander
Simon Courtois
 
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
Mark Menard
 
Perl in the Internet of Things
Perl in the Internet of ThingsPerl in the Internet of Things
Perl in the Internet of Things
Dave Cross
 
Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim PerlchinaPerl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim Perlchinaguestcf9240
 
Perl Moderno
Perl ModernoPerl Moderno
Perl Moderno
Tiago Peczenyj
 
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 2014
Sandy 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 iOS
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 iOS
Paul Ardeleanu
 
Prototype your dream
Prototype your dreamPrototype your dream
Prototype your dream
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 iOS
Paul 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 Ardeleanu
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
Paul Ardeleanu
 
iOSNeXT.ro - Catwalk15 - Mark Filipas
iOSNeXT.ro - Catwalk15 - Mark FilipasiOSNeXT.ro - Catwalk15 - Mark Filipas
iOSNeXT.ro - Catwalk15 - Mark Filipas
Paul 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 Iliescu
Paul 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 iOS
Paul Ardeleanu
 
iOScon 2014
iOScon 2014 iOScon 2014
iOScon 2014
Paul Ardeleanu
 
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
Paul Ardeleanu
 
Prototyping saves your bacon
Prototyping saves your baconPrototyping saves your bacon
Prototyping saves your bacon
Paul 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 app
Paul Ardeleanu
 
Whats new in iOS5
Whats new in iOS5Whats new in iOS5
Whats new in iOS5
Paul 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. iPad
Paul 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 iPhone
Paul 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

Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 

Recently uploaded (20)

Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 

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