Swift Introduction
From Hawk Wiki
Contents
Swift Basic
Var
var languageName = "Swift" // is simplified version of var languageName: String = "Swift"
Constant
let version = 1.0 // let version: Double = 1.0 //:Int, :Bool. :String let components = "~/Documents/Swift".pathComponents //["~", "Documents", "Swift"]
Examples
let a = 3, b = 5 let res = "\(a) times \(b) is \(a * b)" let dog = "dog" var dog1 = dog + "1" let a: Character = "a" let b: Character = "b" let ab = a + b
Array & Dictionary
var names = ["Anna", "Alex", 42] var names: String[] = ["Anna", "Alex"] var numOfLegs = ["ant": 6, "snake": 0] // Dictionary for x in names {} for number in 1...5 {} for num in 0..<5 {} //half close range for (name, legs) in numOfLegs {} //Tuple //Modify Array names += "Sam" names += ["Hao", "Dan"] names[0] = "x" names[3...5] = ["x", "y", "z"] numOfLegs["spider"] = 273 numOfLegs["spider"] = 8
Optionals
let possibleLegs: Int? = num OfLegs["aardvark"] //either get integer or nothing if possibleLegs == nil { } else { let legCount = possibleLegs! //forcing optional value to it's type } //A Simpler way if let legCount = possibleLegs { } Switch legCount { case 0: //no break case 1: case ExecButton: //match object case 1...5: case 2,4,6,8: default: //required } func sayHello(name:String = "default") { //give a default value println("Hello \(name)") }
Tuples
(404, "Not found") (2, "Banana", 0.42) let (statusCode, message) = refresh()
Closures
func repeat(count: Int, task: () -> ()) { for i in 0..<count { task() } } repeat(2, { println("hello") }) repeat(2) { println("hello") }
Class
class Vehicle { var numOfWheels = 0 //stored properties var description: String { //computed properties, has to be var get { //get is optional return "\(numOfWheels) wheels" } } } let someVehicle = Vehicle() //Auto alloc //inheritance class Bicycle: Vehicle { init() { //initializer super:init() numOfWheels = 2 } //properties observers override var speed: Double { willSet { if newValue > 65.0 { println('warning too fast') } } didSet { //oldValue available } } //method func accel() { speed += 0.1 } }
Overriding properties
class Car: Vehicle { var speed = 0.0 init() { super.init() numOfWheels = 4 } override var description: String { return super.description + ", Speed=\(speed) mph" } }
Struct
struct Point { var x: Double, y: Double } struct Rect { var origin: Point var size: Size //computed property var area: Double { return size.width * size.height } //method func isBiggerThanRect(other: Rect) => Bool { return self.area > other.area } } //init var point = Point(x: 0.0, y: 0.0) var rect = Rect(origin: point, size: size)
Struct and Class
1. struct cannot inherite
2. class is passed by reference. struct is passed by value
Constant and Variables
let window = Window(1.0, 1.0) //The reference is a constant, cannot change the reference value can do window.x = 1.0 cannot do window = Window(2.0, 2.0) var point1 = Point(x: 0.0, y: 0.0) // Point is struct. Since point1 is variable, we can do point1.x = 1.0 let point2 = Point(x: 0.0, y: 0.0) // Cannot do point2.x = 1.0 since point2 is constant
Mutating a Structure
struct Point { var x,y: Double mutating func moveToRightBy(dx: Double) { x += dx } }