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型別 :
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
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