welcome to swift (cocoacoder 6/12/14)
DESCRIPTION
Yet another Intro presentation to Apple's new Swift programming language.TRANSCRIPT
![Page 1: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/1.jpg)
Welcome to SwiftCarl Brown (@CarlBrwn) CocoaCoder.org, 12 June 2014 (WWDC Keynote + 10 days)
![Page 2: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/2.jpg)
Disclaimer• We’ve known of this
language’s existence for less than two weeks
• I’ve yet to ship a project with it • We’ve been told the language
will be changing over time
*image: http://vectorgoods.com/wp-content/uploads/2012/01/nuclear-danger-vector.jpg
![Page 3: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/3.jpg)
Event InteractivityPlease(!) stop me if you have questions
http://farm3.static.flickr.com/2197/2200500024_e93db99b61.jpg
![Page 4: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/4.jpg)
What is Swift?New Programming Language from Apple
Announced at WWDC 2014
After being worked on in secret for 4 years
Interoperates with (and may eventually replace) Objective-C
Currently still a work in progress
![Page 5: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/5.jpg)
Looks a lot like a scripting language*
let individualScores = [75, 43, 103, 87, 12] var teamScore = 0 for score in individualScores { if score > 50 { teamScore += 3 } else { teamScore += 1 } } println ("the score is \(teamScore)")
*but it’s compiled
![Page 6: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/6.jpg)
Swift != Obj-CGoodbye Square Brackets*
!
…and semicolons
*Except Array definitions and subscripts
![Page 7: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/7.jpg)
Standard-ish Types
var int1: Int = 30 var float1: Float = 30.5 var bool1: Bool = false var str1: String = "Hello, playground" var array1: Array = ["Hi", 40] var dict1: Dictionary <String,String> = [ "key" : "value"]
![Page 8: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/8.jpg)
Type-safe (and types can be implied)
![Page 9: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/9.jpg)
Swift Still has Immutability
let individualScore = 75 !
!
var teamScore = 0
Read-Only
Read-Write
*Array immutability seems complicated for performance reasons
![Page 10: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/10.jpg)
Loopsvar firstForLoop = 0 for i in 0..3 { firstForLoop += i }
var n = 2 while n < 100 { n = n * 2 }
var m = 2 do { m = m * 2 } while m < 100
let individualScores = [75, 43, 12] for score in individualScores { teamScore += 3 }
![Page 11: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/11.jpg)
Switch directly on Objectslet vegetable = "red pepper" switch vegetable { case "celery": let vegetableComment = "Add some raisins." case "cucumber", "watercress": let vegetableComment = "Make a good tea sandwich." case let x where x.hasSuffix("pepper"): let vegetableComment = "Is it a spicy \(x)?" default: let vegetableComment = "Everything okay in soup." }
*All possibilities MUST be covered or compiler error
![Page 12: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/12.jpg)
“Tuples”
let (statusCode, statusMessage) = http404Error let http404Error = (404, "Not Found")
println("The status code is \(statusCode)") // prints "The status code is 404" println("The status message is \(statusMessage)") // prints "The status message is Not Found”
*This Excerpt (and many others) From: Apple Inc. “The Swift Programming Language.” iBooks.
![Page 13: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/13.jpg)
Compiler Enforces Initialization
![Page 14: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/14.jpg)
“Optionals”Primitive Types can’t be nil
Types have “Optional” versions (nil or value)
You have to “Unwrap” Optionals before you can use them in non-optional context
![Page 15: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/15.jpg)
Convention: Use “if let” to “Unwrap”
var optionalString: String? !
if let definiteString = optionalString { println(definiteString) }
*You can also use (!) and risk a run-time crash
![Page 16: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/16.jpg)
“Generics”–Strongly Typed Collections
![Page 17: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/17.jpg)
Generic Dictionaries, too
![Page 18: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/18.jpg)
“Closures”
var strings = ["a","b","c","d"] let uppercaseStrings = strings.map { (s1: String) -> String in return s1.uppercaseString } //["A", "B", "C", "D"]
![Page 19: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/19.jpg)
Functions
func getGasPrices() -> (Double, Double, Double) { return (3.59, 3.69, 3.79) } getGasPrices()
*This Excerpt (and many others) From: Apple Inc. “The Swift Programming Language.” iBooks.
![Page 20: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/20.jpg)
Classes/Objectsclass NamedShape { var numberOfSides: Int = 0 var name: String init(name: String) { self.name = name } func simpleDescription() -> String { return "A shape with \(numberOfSides) sides." } }
var shape = NamedShape(name: "square") shape.numberOfSides = 4
![Page 21: Welcome to Swift (CocoaCoder 6/12/14)](https://reader033.vdocuments.mx/reader033/viewer/2022050807/53fa2eb58d7f729c2e8b4f6d/html5/thumbnails/21.jpg)
Interoperabilitylet path="/tmp/stringFile.txt" !
let content : AnyObject? = NSString.stringWithContentsOfFile(path) !
if let contentString = content as? String { contentString }