3. SWIFT
Powerful new language created by Apple
Works side by side with Objective-C
Syntax is closer to popular languages
4. VAR VS LET
var for regular variables
let for constants
camelCase your variable names
var variableNumber = 5
let constantNumber = 3.14
5. TYPE INFERENCE
Swift is strongly typed
The type will be inferred when not specified
var explicitVariable: Int = 10
var inferredVariable = 10
var explicitVariable2: Double = 10
6. OPTIONALS
Regular types must always have a value
Optional types used when value may be nil
Denote optionals with a ?
var alwaysAnInt: Int = 15
var maybeAnInt: Int? = 15
maybeAnInt = nil
7. UNWRAPPING AN OPTIONAL
Optionals must be unwrapped before using
Can be checked for nil with an if-statement
Once checked, force unwrap optionals with !
if maybeAnInt != nil {
print("maybeAnInt contains (maybeAnInt!)")
}
8. OPTIONAL BINDING
Cleaner way to unwrap optionals
"Binds" value of optional to new variable
if let definitelyAnInt = maybeAnInt {
print("maybeAnInt contains (definitelyAnInt)")
}
9. IMPLICITLY UNWRAPPED
OPTIONALS
Trigger a runtime error when accessed if
the value is nil
Denoted using a !
var alwaysAString: String! = nil
let stringLength = alwaysAString.characters.count
10. OPTIONAL CHAINING
Cannot access optional without unwrapping
Chaining only accesses if value not nil
var optionalArray: [Int]? = [ 1, 2, 3, 4 ]
var arrayLength = optionalArray?.count
11. ARRAYS
Can only contain a single type
Immutable arrays use let, mutable use var
count, isEmpty, append, insert
let groceryList: [String] = ["eggs", "milk"]
var mutableGroceryList = ["eggs", "milk"]
var item = mutableGroceryList[0]
12. DICTIONARIES
Hold key-value pairs
Keys and values each can only be one type
Best to use optional binding when accessing
var cities = ["New York City" : "USA", "London" : "UK"]
cities["London"]
cities["London"] = nil
13. CLASSES VS STRUCTS
class PersonRefType {
let name:String
var age:Int
// ..
}
// 1
let peter = PersonRefType(name: "Peter", age: 36)
// 2
let peter2 = peter
// 3
peter2.age = 25
// peter {"Peter", 25}
// peter2 {"Peter", 25}
14. CLASSES VS STRUCTS
struct Person {
let name:String
var age:Int
}
// 1
let petra = Person(name:"Petra", age:25)
// 2
var petra2 = petra
// 3
petra2.age = 20
// petra {"Petra", 25}
// petra2 {"Petra", 20}