SWIFT 1.語法基礎

SWIFT 1.語法基礎

變數型別:

  • Int : 值域由平台決定(32bit 或 64bit)
  • Double : 64bit浮點數
  • Float : 32bit浮點數
  • Bool : true / false
  • Character
  • String
  • Tuple : 元組, 用以將多個值(不論型別)組合在一起,
    • ex: let myInfo = ("Felix", 2013), 取用時直接使用index, ex: print("\n(myInfo.0)") //Felix
    • 可設定元素別名, ex: let myInfo = (Name : "Felix",  Year : 2013), 取用時直接使用index, ex: print("\n(myInfo.Name)") //Felix

數值前綴字

  • 0b : 二進制
  • 0o : 八進制
  • 0x : 十六進制

宣告

  • 常數(不可改變, 需給定初始值) : let minPrice = 100
  • 變數(可改變值) : var myValue = 30

標注類型(指定型別) : 在變數名稱之後可以指定其型別

  • var name : String
  • var name : String = "Felix"
  • var val1, val2, val3 : Int //All of val1, val2, val3 are Int

Optionals型別 :

//在型別關鍵字後綴問號(?), 表示此變數可為nil
var num : Int? = 123
num = nil

//強制取值, 需在變數名稱後綴(!)
print("\(num!)")

//可選綁定 (Optional Binding)
var myOpt : Int?
if let tmpVal = myOpt {
    // if myOpt is not null, enter this section.
}

//多重綁定, 為AND, 全部成立才會進入
if let tmpVal = myOpt, tamVal2 = myOpt2 {
    // if myOpt is not null, enter this section.
}

//隱含解析可選, 宣告時型別關鍵字後綴(!)
let sHello : String! = "Hello World"
let sTmp : String = sHello   

About print() : swift 2.0+

  • print("Test") // 顯示Test並換行
  • print("Test", terminator:"\n") // 同print("Test")
  • print("Test", terminator : "") //顯示Test後不換行
  • print("\(name) Test") //顯示時帶入變數name的值

註解

  • 單行:  //
  • 多行: /* ... */

當一行中有多個述敍句時, 需以分號(;)隔開

錯誤處理

do {

//statements...

} catch {

// Get error...

}

斷言 (Assertions)

用以測試程式碼, 若條件式不成立, 便會中斷程式並發送指定的訊息

let age = -4

assert( age > 0, "Age can't less than 0.")

運算子 (Operator)

Assignment operator: =

Arithmetic operator: +, -, *, /, %

Increment/Decrement operator: ++, --

Compound Assignment Operator: +=, -=, *=, /=, %=

Comparison Operator: ==, !=, >, >=, <, <=

Ternary Condition Operator: (comparsion?<when true>:<when false>)

Nil Coalescing Operator: nil comparsion:  opt ?? val //當opt有值時, 回值opt, 當opt為nil時, 回值val

Closed range operator: a...b 代表從a到b的所有值 / Half-open range operator: a...<b 代表從a到b-1的所有值

  • for var inx =1; inx<=5;inx++ {...}
  • for inx in 1...5 {...}

Logical Operator: !, &&, ||

字串特殊字元: 

  • \0 : null
  • \\ : \
  • \t : Tab
  • \n : new line
  • \r : return
  • \" : "
  • \' : '

String - Inserting and Removing

strng.insert("<val>", atIndex : <index>) //在指定位置插入字元
string.splice("<val>", atIndex : <index>) //在指定位置插入字串
string.insertContentsOf("<val>".characters, at: <index>) //在指定位置插入字串
string.removeAtIndex(<index>) //在指定位置移除字元
let range = 3..5; string.removeRange(range) //在指定位置移除字元

Comparison Strings

==, !=, <, <=, >, >=, hasPrefix("<cp>"), hasSuffix("<cp>")

Arrays

var a1 = [String]()

a1.append("V1") //Add item

a1 = []  //Clear array

var a2 = [String] (count:4, repeatedValue: "") //Create an array that has 4 items and all of them are "".

var a3:[String] = ["V", "X", "Y"] 

a3 += ["A", "B", "C"]

a3[3...4] = ["M", "N"]

a3.insert("NEW", atIndex : 0)

a3.removeAtIndex(2)

a3.removeLast()

for item in a3 { print(item) }

for (index, val) in enumerate(a3) { print("Index [\(index)] : \(val)") }

Sets (同hash, 只能存入可以算出hashValue的類型)

  • 相同資料型別
  • 無序的
  • 相同數值只能存入一次

var a1 = Set<Int>()

a1.insert(5) //Add an item "5"

a1 = [] //Clear

var a2 : Set<Int> = [1,2,3]

a2.remove(3) //Remove the item "3"

as.removeAll()

for val in a2 { print(val) }

for val in a2.sort() { print(val) }

Constructing Sets

  • a1.intersect(a2) //取a1與a2的交集
  • a1.exclusivOr(a2) //取a1與a2的XOR
  • a1.union(a2) //取a1與a2的聯集
  • a1.substract(a2) //取a1與a2的差集(a1 - a2)

Comparison Sets

  • ==
  • a1.isSubsetOf(a2) : bool, a1是否為a2的子集合, 自己對自己為true
  • a1.isStrictSubsetOf(a2) : bool, a1是否為a2的子集合, 自己對自己為false
  • a1.isSupersetOf(a2) : bool, a1是否為a2的父集合, 自己對自己為true
  • a1.isStrictSupersetOf(a2) : bool, a1是否為a2的父集合, 自己對自己為false
  • a1.isDisjoinWith(a2) : bool, a1與a2是否分離(內容完全不同)

Dictionaries

  • Key-value
  • 無序的
  • 可存入多個相同數值, 但Key不同

var a1 = [Int : String]() //Key is Int, Value is String

a1[3] = "TEST3"

a1 = [:] //clear

var a2:[Int:String] = [4, "TEST4"]

var a3 =  [4, "TEST4"]

oldVal = a3.updateValue("TEST44", forKey:4)

a3[key] = value;

a3[key] = nil; //Remove an item

for (idx, val) in a3 { print("\(idx) : \(val)") }

for idx in a3.keys { ...}

for val in a3.values {...}

let idx = [Int](a3.keys) //將所有Key值轉為陣列

let val = [String](a3.values) //將所有Value值轉為陣列

- Felix Lai