prettyprint

2015年8月11日 星期二

【Swift 筆記 Draft】閉包 Closure


Syntax 語法:


{ (parameters) -> returnType in statements }
我們以下列為範例:

var students = ["John","David","Claire","Alvin"]

func sortAsc(s1:String, S2:String)->Bool {
   return s1 < s2
}

var sortedStudents = sorted(students,sortAsc)
閉包 closure 為 expression 表達式,可作為函式之參數使用。例如: var sortedStudents = sorted(students, {(s1:String, S2:String)->Bool in return s1 < s2} ) 閉包簡化 1: 省略參數資料型態 students 此 Array 的元素資料型態為 String,而閉包參數的資料型態亦為 String,此時可省略後者資料型態之宣告。例如:

var sortedStudents = sorted(students, {(s1, s2) -> Bool in return s1 < s2} )
閉包簡化 2: 省略返回值 函式 sorted 為 Swift 內建函式[參考:1],其以函式為參數,而這函式參數的回傳值為 Bool,所以可省略此閉包的回傳值。例如:

var sortedStudents = sorted(students, {(s1, s2) in return s1 < s2} )
閉包簡化 3: 省略 return 保留字 已知閉包的回傳資料型態為 Bool,且無其他程式 statements,可省略此 return 保留字。例如:

var sortedStudents = sorted(students, {(s1, s2) in s1 < s2} )
閉包簡化 4: 省略閉包重複參數 S1 與 S2 參數 S1 與 S2 在閉包中重複,可再簡化,但 Swift 不允許簡化為 {(, ) in s1 < s2} ) 或 {(s1, s2) in < } )。前者無法將 S1 與 S2 這兩個參數帶入,而後者雖能帶入此參數,但 Swift 無法判斷是 S1 < S2 或 S2 < S1。因此 Swift 採用腳本 Script 命令中帶入參數的方式,使用 $0, $1, ... 等表示參數1 ,參數 2 等。例如:

var sortedStudents = sorted(students, {$0 < $1} )
閉包簡化 5: 閉包參數再簡化 閉包 {$0 < $1} 表達式說明為 2 個參數的比較,在此僅以 < 此符號即可表達,所以我們可再省略 $0 與 $1 這兩個參數。例如:

var sortedStudents = sorted(students, < )
尾隨閉包 Tailing Closure 尾隨閉包顧名思義為函式最後一個參數被宣告為閉包。若此函式只有此唯一閉包參數,可將閉包寫在函式外面。例如:

var sortedStudents = sorted(students){$0 < $1}
若函式只有一個參數要帶入到閉包,我們可改寫如下:

var sortedStudents = sorted{$0 < $1}
閉包也可以存儲在變數中,存儲後,就可像一般函數使用: var compare = { (a:int, b:int) in a < b } compare(1,2) Learning Resources: 1. Learn to Code in Swift : Understanding Closures (20 of 20), https://www.youtube.com/watch?v=049-G4qSRXQ 2. Mokoversity Course: Apple Swift 101 - Introduction, http://www.slideshare.net/jollen/mokoversity-course-swift-101-3-hours 3. Way to Lambda, http://www.codeproject.com/Articles/507985/Way-to-Lambda 4. 認識 Lambda/Closure(1)從 JavaScript 的函式物件談起, http://www.codedata.com.tw/java/understanding-lambda-closure-1-from-javascript-function-1/ Reference 1. Swift Standard Library Reference, https://developer.apple.com/library/ios/documentation/General/Reference/SwiftStandardLibraryReference/Array.html sorted(_:) Returns an array containing elements from the array sorted using a given closure. Declaration func sorted(isOrderedBefore: (T, T) -> Bool) -> [T] Discussion Use this method to return a new array containing sorted elements from the array. The closure that you supply for isOrderedBefore should return a Boolean value to indicate whether one element should be before (true) or after (false) another element: let array = [3, 2, 5, 1, 4] let sortedArray = array.sorted { $0 < $1 } // sortedArray is [1, 2, 3, 4, 5] let descendingArray = array.sorted { $1 < $0 } // descendingArray is [5, 4, 3, 2, 1] 2. http://chain.logdown.com/tags/swift 2. Mokoversity, http://www.slideshare.net/jollen/mokoversity-course-swift-101-3-hours 3. Programming Language Swift Overview, http://www.slideshare.net/KazYoshikawa/learning-swift-1406

【Swift 筆記 Draft】Enumeration 類型: enum

Syntax 語法

enum EnumerationName
{
   case enumValue1
   case enumValue2
   ...
   case enumValueN
}

或

enum EnumerationName
{
   case enumValue1, enumValue2, ... , enumValueN
}

enum 的變數 / 常數被定義時,其 member 不會像 C、Objective-C 一樣給予默認 default 的整數值。可以用點 (.) 符號來引用 enum 的成員 member。 在 switch 條件式中,若 case 中列舉所有 member,則無需有 default,但若 case 只列舉其中的 member,此條件式仍需要 default。 組合 emnu 的 member 組合 enum 的 member,其資料型態類似 tuple。例如:

enum Product
{
   case Car (String, String, Int) // (Model, Company, Year)
   case TV (String, String) // (Type, Material)
}
emnu 的 member 的原始值 enum Animal: String { case Name = "Cat" case Age = 2 } 引用: 引用時,不可直接飲用,需透過函式 toRaw() println(Animal.Name.toRaw()) Reference 1. Enumerations, https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Enumerations.html

【Swift 筆記 Draft】第 5 講: Function

語法:
func 函數名(){ } -> 回傳 data type
func 函數名(參數:資料型態) -> 回傳 data type
func 函數名(參數:資料型態 = 預設default 值) -> 回傳 data type
函數可不回傳值,若回傳,其值可為 int, float, array, dictionary, tuple 等
參數的Default值定義

定義 fun 時,可設定參數的 default 值。

fun payTicket(price:Int = 800)-> Int {
   return " Ticket price is \(price)"
}

payTicket()
payTicket(1200)


可變參數

函數的參數個數多少未知,但每個參數具有相同的 data type。運用時,可視這可變參數為一個數組。

fun dailyBooking(expenses:Int ...) -> Int {
   var totalExpense:Int = 0
   for expense in expenses {
     totalExpense += expense
   }
   return totalExpense
}

dailyBooking(10,20)
dailyBooking(10,20,30)


參數的傳值或傳址:

參數的傳值是 call by value,而傳址是 call by address。

傳值是呼叫者 copy 相同的值,讓被呼叫的函式 function 使用。兩者各占記憶體 RAM。

傳址是呼叫者將其值得 address,讓被呼叫的函式 function 參考,兩者都參考到相同、且唯一的記憶體 RAM。 

參數的 data type 被宣告為類別 class 時,其呼叫 function 時是傳址 call by address,其他如宣告為整數型、浮點 floating point 、布爾 boolean 、字串 string、元組 tuples、集合 array / dictionary、列舉 enumeration 、結構 struct 等都是傳值 call by value。但,後者可強制使用 inout 這修飾 keyword,命令其只傳址,不過在呼叫時,要在變數前加上位址符號 &。

fun swap(inout x:Int, inout y:Int) {
   var temp:Int
   temp = x
   x = y
   y = temp
}

var num1 = 10, num2 = 20
swap(&num1, &num2)
println("num1: \(num1), num2:\(num2)")

函式的返回值 Return Value:

無返回值

1. fun name(parameters) { ... }  // 無返回值
2. fun name(parameters) -> () { ... }  //返回空的 tuples
3. fun name(parameters) -> Void { ... } //返回Void的類型
返回多個數值

【Swift 筆記 Draft】第 4 講: Flow Control 流程控制

循環 loop 語句:

1. for-in
2. for-condition-increment
3. while
4. do ... while

分支語句:

5. if condition
6. switch

跳轉語句:

7. fallthrough
8. where clause
9. break, continue
10. 可跳轉的標籤


for-in:

for index in 1 ... 10 { ...}

for index in 1 ..< 10 { ...}

for _ in 1 ... 10 { ... } //當 index 在 { ... } 不被使用時
for variable in range (範圍) // 範圍為整數值
for 變數 in range (範圍開始,範圍結束)
for 變數 in range (範圍開始,範圍結束,每次相差)
for 變數 in 矩陣Array

for 變數 in 字串
Example:
for x in range(5)
   print x    // 列印: 0,1,2,3,4
for x in range(1,5)
   print x    // 列印: 1,2,3,4
let nums = [1, 2, 3, 4, 5] for num in nums { ... } let dict1 = ["key1":1,"key2":2 ] for (key,value) in dict1 { ... } for character in "hello, world" { ... } for-condition-increment:

for initialization; condition; increment { ... }
while

while condition { ... }
do ... while

do { ... } while condition
無限循環:

for ; ; { ... }
while true { ... }
do { ... } while true
if condition

if condition { ...}

if condition { ...} else { ... }

if condition1 { ... }
else if condition2 { ... }
else { ... }
switch 可用於 Integer / Floating Point / Character / String / Tuple 等類型的數據做比較。 switch 必須涵蓋所有可能狀況,所以 default 不能省。

switch condition {
   case value1:
      statement1
   case value2, value3:
      statement2
   ...
   default:
      statementN+1
}
例如:範圍 range 比較: let weight = 80 switch weight { case 0 ..< 50: println("lower than standard") case 50: println("perfect") case 51 ... 200: println("above the standard) default: println("Not applicable") } where clause where: 在 case 中增加篩選條件 let weight = 80 switch weight { case let (x) where x < 50: println("lower than standard") case let (x) where x == 50: println("perfect") case let (x) where x > 50: println("above the standard") default: println("Not applicable") } 將 weight 這值 binding 到一個臨時的 constant / variable。(例如:x) fallthrough: fallthrough 為貫穿 case 而設計。例如: var n = 1 var x = 2 switch x { case 1: n++ case 2: n++ fallthrough case 3: n++ default: n++ } println("n = \(n)") //此時 n = 3 break, continue continue: 結束本次loop,進入下一個 loop break: 結束當前 statements 執行 可跳轉的標籤Label: forLabel:for index1 in 1 ... 5 { for index2 in 1 ... 5 { ... break forLabel } }

【Swift 筆記 Draft】第 3 講(2):字典 Dictionary


字典是將鍵 key 映射到值 value 的類型。

1. Dictionary 由 key 與 value 所組成,各 element 以逗號 , 區隔
2. Dictionary 以 key 來搜尋相對應的 value
3. Dictionary 中的 element 沒有次序關係
4. Dictionary 若以 var 宣告,可新增修改除集合資料的 element。

宣告 Dictionary:

var name:Dictionary = ["first":"Rob", "last":"Hsu"]
var name:[String: String] = ["first":"Rob", "last":"Hsu"]
var name =["first":"Rob", "last":"Hsu"]
Dictionary 以 Dictionary 來宣告,這裡 T1, T2 表示泛型 Generic Type,T1 是 key,而 T2 是 value。 宣告 empty dictionary:

var name = Dictionary()
var name = [String: String]()
清空Dictionary name: name = [:] 新增、修改、刪除 Dictionary 之 element dictionaryName[key] = value 新增:  name["second"] = "Mary" // name = ["first":"Rob", "last":"Hsu", "sechond":"Mary"] 修改: name["first"] = "John" name.updateValue("Wang", forKey:"Rob") // name = ["first":"Rob","last":"Wang"] name["first"] = nil // name = ["last":"Hsu"] 刪除: name["first"] = nil // delete name.removeValueForKey("Rob") Getter / Setter: println(name["Bob"]) 將 value 轉換為指定的 data type: (1) 將 String 轉換為 Int 類型的值: var dict1 = ["key1":"10", "key2":"20"] var num1:Int? = dict1["key1"]?.toInt() (2) 將原本是 Int 的 NSObject 值轉換為 Int 類型的值: var dict2 = ["key1":"10", "key2":20] var num2:Int = dict2["key2"] as Int (3) 將原本是 String 的 NSObject 値轉換為 Int 類型的值: var dict2 = ["key1":"10", "key2":20] var num3:Int? = (dict2["key1"] as? String)?.toInt() Dictionary Iteration: 與 Array 不同,Dictionary 有兩個集合,所以 iteration 可以針對 key 或 value 操作。 enum 字典中的 key 與 value:

for (key, value) in dictName
{
  ...
}
或是

for key in dictName.keys
{
   ...
}

for value in dictName.values
{
   ...
}
當 Dictionary 類型變成 NSDictionary 時,可先將其轉成 Dictionary:

for key in (dictName as Dictionary).keys
{
   ...
}
var dict2 = ["key1":"10", "key2":20] for key in (dict2 as Dictionary).keys { println(key) } 將 key 與 value 轉換成 Array: var dict1 = ["key1":"10", "key2":"20"] let keys = Array(dict1.keys) let values = [String](dict1.values)

【Swift 筆記 Draft】第 3 講(1): 數組 Array

1. Array 是一組有次序的,由相同 data type 的 element 構成的集合collection。
2. Array 中的 element 可以重複出現。
3. 以 let 宣告的 array 為不可變資料,無法新增修改刪除,而以 var 宣告的 array 資料可以。

 Swift 可新增、修改、刪除 Array 中的元素 element。(其他語言不可)


宣告與 init

let colorArray = ["red","white","black"]  // read only
println(colorArray)

var colorArray:[String] = ["red","white","black"] // read / write
var colorArray:Array<string> = ["red","white","black"]
var colorArray:[String] = 3 values {
      [0] = "red"
      [1] = "white"
      [2] = "black"
}

Array 中的 element,其 data type 需一致。若不一致,其 data type 轉換為 cocoa library 中的 NSArray / NSMutableArray。

var mixedTypeArray = ["abc", 1]

宣告 empty Array

var nullArray1 = [String]()
var nullArray2:[String] = []
var nullArray3:Array<string> = []


若宣告為下列,則不會使用 Swift 的 Array 這 data type,而是轉換成 NSMutableArray:

var nullArray = []

宣告固定長度 Array

var fixedLengthArray = [Int](count:3, repeatedValue:1)

宣告2維陣列 2 Dimension Array

var myArray = [[1,2,3] , [4, 5, 6]]

Array 相加

var array1 = [1, 2, 3]
var array2 = [4, 5,6]
var array3 = array1 + array2 // [1,2,3,4,5,6]

Array 的 getter / setter

var array1 = [1, 2, 3]
println(array1[0])  // 1
array1[0] = 0 // array1[1] = [0, 2, 3]

Array 區間 range 之 Assignment

arrayName[min ... max] = [item1, item2, ...,itemn]
arrayName[min ..&lt; max] = [item1, item2, ...,itemn]

var num[0 ... 2] = [1, 2, 3]

Array 新增、刪除 element

append : array1.append(9) // array1 = [1,2,3,9]
+ :array1 += [8] // array1 = [1,2,3,8]
insert : array1.insert(7,atIndex:array1.count) // array1 = [1,2,3,7]
removeLast : array1.removeLast  // array1 = [1,2]
removeAtIndex : array1.removeAtIndex(0) // array1 = [2, 3]
removeAll
empty
count

Array Iteration:

var array1 = [1, 2, 3]
for i in array1 {
  println("i = \(i)")
}

for (index, value) in enumerate(array1){
  println("index \(index): \(value)")

執行結果:

index 0: 1
index 1: 2
index 2: 3



【Swift 筆記 Draft】第 2 講: 基本操作


1. Assignment OP
2. Number OP
3. 複合 compound assignment op
4. comparison op
5. 三元條件 triple condition op
6. range op 區間操作
7. logical op 邏輯操作
8. bit op 位元操作
9. 其他運算 op

OP 種類

一元、二元、三元 operator

Assignment Operator:

let a = "12"
var (length, width) = (5, 8)

Swift 的 assignment op 不回傳值,所以下列錯誤:

var x = 1
var y = 2
if (x = y) {
 ...
}

這在 Objective-C 允許,且判斷為true 真

Number Operator:

+, - , x , / , %

++, --

- (負號)
let a:Byte = 120 let b:Byte = 20 println("\(a * b)") // error, Swift 默認 value 不能 overflow println("\(a &* b0)") // 縱使 a * b 計算結果超出範圍,仍被 println Compound Operator:

+=, -=, *=, /=, %=
Comparison Operator:

==, !=, > , < , >= , <=
恆等號:

object1 === object2
object1 !== object2
判斷 object1 與 object2 這兩個 object 是否引用同一個 class 的實例 (一個對象已分配 RAM,而 object1 與 object2 是否都指向這個 RAM 的位址) 三元條件 Triple Condition Operator:

condition ? true_Return_value: false_Return_value
區間 Range Operator:

閉區間 ...
半開區間 ..<
邏輯符號 Logical Operator:

!a
a && b
a || b
位元符號 Bit Operator:

~, &, |, ^, >>, <<
其他運算符號: 括號 () 可改變運算的優先次序 priority 引用號 . : object要存取 property,使用 method 下標 [] 運算符: 箭頭 -> : function / method 的 return value 逗號 , : 用於 collection中 element的區隔 冒號: 用於 dictionary 中 key 與 value 的區隔

【Swift 筆記 Draft】第 1 講: 語言基礎

Program

Program = Data Structure + Algorithm

Code

set of statements

Statement

1. 多個 statement 寫在一行時,以分號 ; 來區分 2. compiler 可以分號(;)或空白字元來識別statement

Variable / Constant Naming 命名

Swift 採用 unicode,Variable / Constant 的 name 可使用中文、符號等。 合法的 Naming 原則: 1. case sensitive 大小寫有區分,例如: Book 與 book 為不同的識別字 Identifier 2. 首字可為底線 underline _ 或者字母開始,但不能是數字 3. 除首字外,identifier 中的字符可用 underline _ , 字母或是數字
4. 不可使用Swift 已定義的關鍵字(Keyword)

Swift 語言非常特別,每個字符採用 Unicode 編碼。

Naming 命名中不可使用:

1. 數學符號
2. 箭頭
3. 保留字
4. 非法 Unicode 字元
5. 連線與制表符號[1]

但,若要引用保留字作為 Variable / Constant 的名稱時,需用反引號(`)來含括。

var `var` = "hello, world"  // type inference
printf("The code: \(`var`))

關鍵字 Keyword

1. 與宣告 Declaration 有關的 keyword: class、deinit、enum、extension、func、import、init、let、protocol、static、struct、subscript、typealias、var 2. 與 Syntax 有關的 Keyword: break、case、continue、default、do、else、fallthrough、if、in、for、return、switch、where、while 3. 表達式與類型 Keyword: as、dynamicType、is、new、super、self、Self、Type、__COLUMN__、__FILE__、__FUNCTION__、__LINE__ 4. 在特定上下文中使用的 Keyword: associativity、didSet、get、infix、inout、left、mutating、none、nonmutating、operator、override、postfix、precedence、prefix、rightset、unowned、unowned(safe)、unowned(unsafe)、weak、willSet

Variable / Constant 宣告

Variable 被宣告定義後,其值可變更,但,Constant 常數顧名思義,一經宣告後,不能變更其值。

當 Variable 變數確定好data type 資料型態後,就不能再儲存另一種資料型態。

Variable 變量、變數:

var varName = initValue
var varName:dataType
var varName:dataType = initValue
變數 variable 命名 一般首字詞為小寫,若有多個字詞,其他字詞首字母為大寫,例如: var studentName:String Constant 常量、常數:

let constName = initValue
let constName:dataType = initValue

常數 Constant 命名 一般為大寫,而以底線 underline (_)來連結兩個字詞,例如: let OMEGA_CONSTANT = 0.56714 1. 靜態語言(例如 Java)的 Variable 的 data type 在 compile 階段就確定,但動態語言 (例如 swift) 則在 Run Time 階段才確定。 2. Swift 是安全性強的語言,Variable 與 Constant 都會指定唯一 data type,但允許以 顯性 / 隱性方式宣告其 data type 3. 若以隱性方式宣告 data type 時, Variable / Constant 需給 init value 4. Variable / Constant 一經指定 data type,其 data 的 type 是不允許以 cast 或任何方式更改 5. 多個 Variable / Constant 被宣告在同一行,則以逗號 (,) 區隔 Variable / Constant Init 初始值 Variable 可宣告 data type,之後程式再設定 init value 即可, 例如:

var x            //不合法
var x = 100      //合法,Swift 推論 infer 這變數 x 的 data type 為 Int
var x: Int       //合法,已宣告此變數的 data type 為 Int,程式稍後給初始值即可
但,Constant 宣告時,必須設定初始值,例如:

let X            //不合法
let X: Int       //不合法
let X = 100      //合法,隱性方式宣告
let X: Int = 100 //合法
亦可使用下列語法將變數包含在字串中:

let myNumber = 10
let myString1 = "Number is \(myNumber)"
let myString2 = "Number is \(myNumber + 8)"
String 的 cat 操作 1. String1 + String2 + ... 2. String1 + toString(variable/constant/...) 3. "String \(variable/constant)"

Data Type 數據類型

1. 整數類型 Integer 2. 浮點類型 Floating Point 3. 布爾類型 Boolean 4. 字符/字串類型 Character / String 5. 特殊類型 (位元組 Byte、可選類型) Data Type 都是以大寫字母開頭 Variable / Constant 在 initialize 初始值設定時,要注意 data type 的值域範圍。 整數類型: 1. Signed Integer: Int8 (Byte / SingedByte)、Int16 (ShortFixed)、Int32 (Int)、Int64 (Fixed)、Int [括號為其alias name 別名]
2. Unsigend Integer: UInt8、UInt16、UInt32、UInt64、UInt


3. 整數類型可以十進位制、二進位制(0b)、八進位制(0o)、十六進位制(0x) 表示。

Int/ UInt 是與 platform 有關的整數類型。在32位元平台,Int/UInt 與 Int32/UInt32寬度相同,而在64位元平台,Int/UInt 與 Int64/UInt64 寬度相同。

4. 整數類型 Value 範圍: 其形態皆有 min 與 max 屬性。例如: UInt8.min 與 UInt8.max 定義 UInt8 的值域 domain 範圍。

浮點類型

與整數相反,是具有小數部分的數字。


Float、Float64、Double
指數表示: 10 進位制: 1.32e-2, 2.72e3 16 進位制: p3 (即 2x2x2 = 8) or P3

為增加可讀性, Integer / Floating point 數值可添加多個 0 或底線,例如:

     var rate = 000.002
     var saving = 3_668_108
數值轉換 cast 1. 整數與整數之間 2. 浮點數與浮點數之間 3. 整數與浮點數之間 整數/浮點數間數值轉換 1. 初始值為數值時,compiler 自動cast var var1:Int32 = 100 2. 初值為 variable / constant 時,需 cast var var2:Int32 = Int32(var1) 注意:轉換時,若大範圍的數值轉換為小範圍的數值時,精確度 precision 會喪失。例如:UInt32 數值轉換為 UInt8 數值。 類型 Alias Name

typealias newClassName = originalClassName
typealias NewType = Int64 var var1:NewType = 100 布爾類型 布爾類型 Boolean 只含邏輯值,即 true (真) / false (假)

let constName:Bool = boolean_value
var variableName:Bool = boolean_value
let num = 100 let result = num == 200 // result is "false" var isAnimal = true 字元和字串: Swift 字元皆以 Unicode 編碼。 字元宣告:

var charValue:Character = "A"

注意:字元宣告亦使用雙引號。 字串宣告:

var stringValue1:String = "A"
var StringValue2 = String("A")
var stringValue3 = String() //空字串
var stringValue4 = "" //空字串

let A = "A" // data type : Character let B = "12" // data type : String let C = A + B // C = "A12" 特殊字元:

\0: null
\\: slash             /u005c
\t: tab               /u0009
\n: new line          /u000a
\r: return            /u000d
\": double quote      /u0022
\': single quote      /u0027
字串中包含特殊字元: 單字節編碼:\xnn 雙字節編碼:\unnnn (例如:lamda 使用 \u03bb 表示) 四字節編碼:\Uxnnnnnnnn (例如:笑臉 Smile 使用 \U0001f603 表示) n: 0 - 9, A - F 16 進位 字串包含 Unicode字元: let percentage = "\x{25}" let snowflake = "\u{2744}" let heart = "\U{0001F497}" \x: before two hexadecimal digits \u: before four hexadecimal digits \U: before eight hexadecimal digits 字串比較:

運算元 == , < , >
字串大小寫轉換:

let upperCaseStr = lowerCaseStr.uppercaseString
let lowerCaseStr = upperCaseStr.lowercaseString
前綴與後綴的比較:

前綴:string.hasPrefix("prefixValue")
後綴:string.hasSuffix("suffixValue")
元組類型 Tuples: Tuples are ordered lists of values. 將多個相互關聯的值合為一個值,方便管理和計算。 宣告: let person = (18, "John", size:"big") // 或 person = (age:18, name:"John", size:"big") println(person) 獲取: println("age:\(person.0), name:\(person.1)") var (_, name, _) = person println("name: \(name)") println("size: \(person.size)) let area = (10, 20) // area = (length, width) var area = (length:10, width:20) let (length, width) = area length // prints 10 Optional 類型 In situations where you can't be sure a variable has a value present, you can use optionals. Object 的值 value 可為 nil 宣告: var string1 = "12" var num:Int? = string1.toInt() println(num!) // num 一定有 value,否則 error 亦可以下列表示: var string1 = "12" var num:Int! = string1.toInt() println(num) println(num! + 2) //不可寫成 println(num + 2) var s:String s = "ABC" s! // if you know s has a value, then you could unwrap s using an exclamation point (!)


Word 字組


為Swift 的儲存單位,為 64 bit 字元,即 8 byte 的整數

var 變數名: Word = 初始值

Comment

多行註解: /* ... */ 單行註解: // Swift 允許 nest 巢狀註解: /* this is /* a book */ */

Xcode 提供快捷鍵多行comment: 點選多行 code 後,按住 command + / 可多行註解,解除亦以 command + / 命令。

prettyPrint();