Dictionary
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import UIKit // KEY - VALUE var dict = ["Brewery" : "a place where beer is made.", "Bakery" : "a place where bread is made"] // Declare type var dict_2 : [String : Int] = ["Angela": 111111, "BingXiong" : 222222] // Compare to array var myArray = ["Bing", "Xiong"] print(myArray[0]) // Retrieving from array print(dict_2["Bingxiong"]) |
Optionals
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//var player1Username: String = nil // cannot do this var player1Username: String? = nil // data is nil //var player1Username: String? // has no data player1Username = "BingXionbg" print(player1Username) // Optional("BingXiong") var unwrappedP1Username = player1Username! // overriden safety check print(unwrappedP1Username) // BingXiong player1Username = nil print(player1Username) // nil // So we need to implement some safety check if player1Username != nil{ print(player1Username) }else{ print("player1Username is nil") } //Optional("BingXionbg") //BingXionbg //nil //player1Username is nil |
Structures
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
struct Town { let name = "aTown" var citizens:[String] = ["BingXiong", "jack"] let resouces = ["Ore": 42, "Grain": 100, "Wool": 75] func fortify() { print("Defences increased!") } } var myTown = Town() print(myTown.name) // aTown print(myTown.resouces["Grain"]) // Optional(100) print(myTown.resouces["Grain"]!) // 100 myTown.citizens.append("Tom") print(myTown.citizens) // ["BingXiong", "jack", "Tom"] myTown.fortify() // Defences increased! |
init() {}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
struct Town { let name:String var citizens:[String] let resouces:[String: Int] init(name: String, citizens: [String], resouces: [String: Int]) { self.name = name self.citizens = citizens self.resouces = resouces } func fortify() { print("Defences increased!") } } var anotherTown = Town(name: "aTown", citizens: ["BingXiong"], resouces: ["Coconuts": 100]) anotherTown.citizens.append("Jack") print(anotherTown.citizens) // ["BingXiong", "Jack"] var ghostTown = Town(name: "Ghost Land", citizens: ["no one"], resouces: ["Tunbleweed": 1]) ghostTown.fortify() |
Immutability
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
struct Town { let name:String var citizens:[String] var resouces:[String: Int] init(name: String, citizens: [String], resouces: [String: Int]) { self.name = name self.citizens = citizens self.resouces = resouces } func fortify() { print("Defences increased!") } // func harvsetRice() { // self.resouces["Rice"] = 100 // self is immutable // } mutating func harvsetRice() { self.resouces["Rice"] = 100 } } var myTown = Town(name: "aTown", citizens: ["BingXiong"], resouces: ["Coconuts": 100]) myTown.harvsetRice() print(myTown.resouces) // ["Coconuts": 100, "Rice": 100] |
Classes and Inheritance
- SubClass
- SuperClass
- override
- super.method()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Define a class class Enemy{ var health = 100 var attackStrength = 10 func move(){ print("Walk forwards") } func attack(){ print("Land a hit, dose \(attackStrength) damage.") } } let skeleton = Enemy() skeleton.move() skeleton.attack() |
Loop
for loop
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
let word = "hvakjandknakjsndjksankdas" let fruits = ["Apple", "Banana", "Orange", "Pear"] let contacts = ["Adam": 1234567890, "James": 128848291, "Amy": 1238858314] let halfOpenRange = 1..<5 let closeRange = 1...5 for letter in word { print(letter) } for fruit in fruits { print(fruit) } for person in contacts { print(person.key) print(person.value) } for number in halfOpenRange{ print(number) } for number in closeRange { print(number) } |
while loop
1 2 3 4 5 6 7 8 |
var now = Date().timeIntervalSince1970 let oneSecondFromNow = now + 1 while now < oneSecondFromNow { now = Date().timeIntervalSince1970 print("Waiting...") } |
Type casting
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
// Type Casting // as as? as! is import Foundation class Animal{ var name:String init(n:String) { name = n } } class Human: Animal{ func code() { print("Typing away...") } } class Fish: Animal{ func breathUnderWater() { print("Breathing under water") } } let angela = Human(n: "Angela Yu") let jack = Human(n: "Jack Bauer") let nemo = Fish(n: "Nemo") let neighbours = [angela, jack, nemo] let neighbour1 = neighbours[0] // Cast double into int // But this is not a good type casting // This is create a new int from double let myDouble = 0.0 let myDoubleAsAnInt = Int(myDouble) // is: for type checking if neighbours[2] is Human{ print("First Neighbour is human") } func findNemo(from animals: [Animal]){ for animal in animals{ // loop and find Fish data type if animal is Fish{ print(animal.name) // Downcast to subclass let fish = animal as! Fish fish.breathUnderWater() // Upcast a object to super classs let animalFish = fish as Animal } } } findNemo(from: neighbours) // as?: if can be cast, to make casting safe if let fish = neighbours[1] as? Fish{ fish.breathUnderWater() } let num = 12 // Any to make array elements can be different data type let neighbours2: [Any] = [angela, jack, nemo, num] // Anyobject means elements are created from class let neighbours3: [AnyObject] = [angela, jack, nemo] let number: NSNumber = 12 let word: NSString = "abc" let neighbours4: [NSObject] = [number, word] |