大綱
- 宣告、資料型態與型態轉換
- 流程控制
- 陣列、集合與字典
宣告、資料型態與型態轉換
宣告
在swift中,使用 var 宣告變數, let 宣告常數
let 「常數名稱」 : 「型態」 = 「值」
var 「變數名稱」 : 「型態」 = 「值」
let str : Int = 10 //宣告 str 為 整數 10 的常數
變數或常數在宣告的時候可以省略資料型態,其型態由等號右邊的值決定
let n = 10.25 //宣告 n 為 浮點數 10.25 的常數
型態轉換
Swift屬於強型別(strongly typed)語言,代表運算式中各個變數或常數的資料型態必須一致,例如運算式 n=x ,如果 n 的型態是 Int32 而 x 的型態是 Int ,此時就必須把 n 與 x 調整成一致的資料型態才行
let n = Int("10") //字串轉整數
let s = String(20) //數字轉字串
let n32 = Int32(10) //Int 轉 Int32
let m = Int(1.2376) //小數轉整數
let f = Float(10) //整數轉浮點數
Any
Any 表示任何型態。如果我們想要一個可以放任何型態的陣列,可以宣告如下:
var list : [Any] = []
list.append("hello") //字串
list.append(10) //整數
list.append(20.3) //浮點數
list.append([ "KEY" : 5 ]) //字典
取出資料時需要先轉型為正確型態 (使用 as! 指令) 才能後續處理,
例如 list[3] 這筆資料
print((list[3] as! [String : Int])["KEY"]!)
// 印出 5
流程控制
迴圈
For-In
For-In 迴圈可重複取得陣列中每個元素,數字範圍或是字串中的每個字元,例如:
//陣列 for city in ["台北","台中","高雄"] { print(city) } //數字範圍 for n in 0...10 { print(n) } //字串 for c in "hello world" { print(c) }
在數字範圍的例子中,「 0...10 」代表包含0也包含10,若為「 0..<10 」則表示包含 0 但不包含 10。如果迴圈範圍為「 0...10 」但一次增加 2 ,就必須加上 where 條件,語法為:
for n in 0...10 where n % 2 == 0 { print(n) // 0 2 4 6 8 10 }
若要由大到小,就要藉助 reverse() 了,例如我們想要從 10 到 0,每次遞減 2,如下:
for n in (0...10).reversed() where n % 2 == 0 { print(n) // 10 8 6 4 2 0 }
While
如果判斷式成立,則進入迴圈
var n = 0 while n < 10 { print(n) n = n + 1 } // 0 1 2 3 4 5 6 7 8 9
Repeat-While
此迴圈跟 while 迴圈類似,不過 Repeat-While 迴圈是先執行迴圈一次再判斷是否要繼續
var n = o repeat { print(n) n = n + 1 } while n < 10 // 0 1 2 3 4 5 6 7 8 9
continue 與 break 語句
continute 可以立即讓程式跳到下一檢查迴圈是否要執行的位置
break 則可以立刻結束迴圈for i in 1...5 { if i == 3 { continue } print(i) } // 印出 1 2 4 5 for i in 1...5 { if i == 3 { break } print(i) } // 印出 1 2
判斷式
- if-else
if a == 10 { // a 等於 10 } else if a == 20 { // a 等於 20 } else { // a 不等於 10 也不等於 20 }
switch-case
let n = 10 switch n { case 0...2: // n 的範圍在 0 與 2 間 break case 3...5: // n 的範圍在 3 與 5 間 break default: // 其他 break }
陣列、集合與字典
陣列
- 一維陣列
首先先宣告一個 字串陣列 並初始化為空陣列
此陣列為空陣列,若要增加陣列元素,可以使用 append()函數來增加var cities = [String]
若要印出或修改內容,方式如下:cities.append("台北") cities.append("台中") cities.append("高雄")
陣列也可以在初始化的時候將值填入陣列中print(cities[1]) //台中 cities[2] = "花蓮" //將 高雄 改成 花蓮
若要宣告一個大型陣列,可以使用 Array 來完成let school = ["國小","國中","高中"]
var x = Array(repeating : 0, count : 100) //產生一個具有 100 個元素的陣列,並且全部初始化為 0
- 二維陣列
宣告方式
新增方式var nums = [[Int]]
此時陣列裡包含了 [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 , 7 , 8 , 9 ] ]nums.append([1,2,3]) nums.append([4,5,6,7,8,9])
print(nums[0][1]) //印出 2 print(nums[1][3]) //印出 7
集合
集合型態是用來儲存不強調索引值或鍵值的資料。宣告方式類似陣列,
但需指定型態為 Set
var zoo : Set = ["斑馬","獅子","長頸鹿"]
雖然類似於陣列,但是如果使用 zoo[1] 是錯誤的,因為集合沒有索引值。
我們只能用 contains() 去判斷某個資料是否在集合中
if zoo.contains("獅子") {
print("動物園中有獅子")
}
要將資料加進集合中,可以使用 insert()
zoo.insert("眼鏡猴")
如果插入一個集合中已存在的元素,集合內容不會發生改變。
因為集合中的元素只會維持 單一元素
if zoo.insert("斑馬").inserted {
print("成功")
}else {
print("失敗") //因集合中已存在 "斑馬" ,固集合內容不會發生改變
}
字典
字典相當於是「 自訂索引值 」的陣列。例如:透過字典來紀錄 Eric 這個人的相關屬性
var Eric : [String : Any] = {
"髮色" : "黑色" ,
"身高" : 174 ,
"體重" : 73
}
如果要取得 Eric 的身高,方式如下:
print(Eric["身高"]) //175
若要修改 Eric 的體重,方式跟陣列一樣
Eric["體重"] = 60
也可以直接增加屬性
Eric["性別"] = "男"
若要刪除某個 Key,使用 removeValue() 即可
Eric.removeValue(forKey : "髮色")
結尾
本篇為基礎篇介紹,第二篇開始會介紹如何開發第一支程式!