SlideShare ist ein Scribd-Unternehmen logo
1 von 142
Downloaden Sie, um offline zu lesen
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

Weitere Àhnliche Inhalte

Andere mochten auch

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
 
Swift Basic
Swift BasicSwift Basic
Swift BasicRyan Chung
 
Quick quiz on Objective-C
Quick quiz on Objective-CQuick quiz on Objective-C
Quick quiz on Objective-CStephen Gilmore
 
Arrays in Objective-C
Arrays in Objective-CArrays in Objective-C
Arrays in Objective-CStephen Gilmore
 
Swifter Taipei 聊聊 Swift éŠæš‚ć Žă€èźŠæ•žćžžæ•žă€æ•žć­—èˆ‡é‹çź—
Swifter Taipei 聊聊 Swift éŠæš‚ć Žă€èźŠæ•žćžžæ•žă€æ•žć­—èˆ‡é‹çź—Swifter Taipei 聊聊 Swift éŠæš‚ć Žă€èźŠæ•žćžžæ•žă€æ•žć­—èˆ‡é‹çź—
Swifter Taipei 聊聊 Swift éŠæš‚ć Žă€èźŠæ•žćžžæ•žă€æ•žć­—èˆ‡é‹çź—Xue Xin Tsai
 

Andere mochten auch (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 éŠæš‚ć Žă€èźŠæ•žćžžæ•žă€æ•žć­—èˆ‡é‹çź—
 

Ähnlich wie 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
 

Ähnlich wie 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?
 

Mehr von 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
 
Prototype your dream
Prototype your dreamPrototype your dream
Prototype your dreamPaul 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
 
Whats new in iOS5
Whats new in iOS5Whats new in iOS5
Whats new in iOS5Paul 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
 

Mehr von 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
 

KĂŒrzlich hochgeladen

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
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
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Christopher Logan Kennedy
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
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
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 

KĂŒrzlich hochgeladen (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
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
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
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
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 

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