標籤:
—、元群組類型
1.什麼是元群組類型
元群組類型由 N個 任意類型的資料群組成(N >= 0),組成元群組類型的資料可以稱為“元素”
樣本:
let position = (x : 10.5, y : 20) // position有2個元素,x、y是元素的名稱
let person = (name : "jack") // person只有name一個元素
let data = () // 空的元組
2.元素的訪問
var position = (x : 10.5, y : 20)
(1)用元素名稱
let value = position.x // 取值
position.y = 50 // 設值
(2)用元素位置
var value = position.0 // 相當於var value = postion.x
position.1 = 50 // 相當於postion.y = 50
程式碼範例:
注意:如果用let來定義一個元組,那麼就是常量,就無法修改它的元素
let point = (x : 10, y : 20)
point.x = 30
第2行代碼會報錯
程式碼範例:
3.元組的輸出
可以輸出整個元組來查看所有元素的值
var point = (x : 10.5, y : 20)
point.x = 30
point.1 = 50
println(point)
輸出結果是:(30.0, 50)
二、使用細節
(1)可以省略元素名稱
let position = (10, 20)
let person = (20, "jack")
(2)可以明確指定元素的類型
var person: (Int, String) = (23, "rose")
person的第0個元素只能是Int類型、第1個元素只能是String類型
注意:在明確指定元素類型的情況下不能加上元素名稱
因此,下面的語句是錯誤的
var person: (Int, String) = (age : 23, name : "rose")
(3)可以用多個變數接收元組資料
var (x , y) = (10, 20) // x是10,y是20
var point = (x, y) // point由2個元素組成,分別是10和20
(4)可以將元素分別賦值給多個變數
var point = (10, 20)
var (x , y) = point
// x是10,y是20
(5)可以使用底線 _ 忽略某個元素的值,取出其他元素的值
var person = (20, "jack")
var (_, name) = person
// name的內容是“jack”,person中的元素20被忽略
三、swift中的流程式控制制
Swift支援的流程結構如下:
迴圈結構:for、for-in、while、do-while
選擇結構:if、switch
注意:這些語句後面一定要跟上大括弧{},在C語言中不是必須的
說明:跟C語言對比,用法基本一樣的有:for、while、do-while、if
因此,只需要關注for-in和switch即可
四、for-in結構
簡單使用:
for-in和範圍運算子
for i in 1...3 {
println(i)
}
// 按順序從範圍中取值賦值給i,每取1次值,就執行1次迴圈體
// 範圍的長度就是迴圈體執行的次數
程式碼範例:
提示:如果不需要用到範圍中的值,可以使用底線 _ 進行忽略
for _ in 1...3 {
println("*********")
}
程式碼範例:
注意:i為常量,其值是不能改變的。
五、switch的使用
1.使用樣本:
let grade = "B"switch grade {case "A": println("優秀等級")case "B": println("良好等級")case "C": println("中等等級")default: println("未知等級")}View Code
2.switch語句在 Swift 和 C 中的區別:
在C語言中,如果case的結尾沒有break,就會接著執行下一個case或者default語句
在Swift中,不需要在每一個case後面增加break,執行完case對應的代碼後預設會自動結束switch語句
3.switch的注意點
在Swift中,每一個case後面必須有可以執行的語句
let grade = "B”switch grade {case "A":case "B": println("良好等級")default: println("未知等級")}View Code
說明:第二行代碼會報錯
4.case的多條件匹配
1個case後面可以填寫多個匹配條件,條件之間用逗號,隔開
let grade = "B”switch grade {case "A":case "B": println("良好等級")default: println("未知等級")}View Code
5.case的範圍匹配
case後面可以填寫一個範圍作為匹配條件
let score = 95switch score/10 {case 10, 9: println("優秀")case 8, 7, 6: println("及格")default: println("不及格")}// 列印結果是:優秀View Code
注意:
switch要保證處理所有可能的情況,不然編譯器直接報錯
因此,這裡的default一定要加,不然就出現了一些處理不到的情況
6.case匹配元組
case還可以用來匹配元組。比如判斷一個點是否在右圖的藍色矩形框內
let point = (1, 1)switch point {case (0, 0) : println("這個點在原點上")case (_, 0) : println("這個點在x軸上")case (0, _) : println("這個點在y軸上")case (-2...2, -2...2) : println("這個點在矩形框內")default: println("這個點在其他位置")}View Code
第5行中 _ 的作用(2種理解方式)
(1)能匹配任何值
(2)忽略對應位置元組元素
7.case的數值綁定
在case匹配的同時,可以將switch中的值綁定給一個特定的常量或者變數,以便在case後面的語句中使用
let point = (10, 0)switch point {case (let x, 0) : println("這個點在x軸上, x值是\(x)")case (0, let y) : println("這個點在y軸上, y值是\(y)")case let (x, y) : println("這個點的x值是\(x), y值是\(y)")}// 列印:這個點在x軸上, x值是10View Code
8.where
switch語句可以使用where來增加判斷的條件。比如判斷一個點是否在右圖的綠線或者紫線上
var point = (10, -10)switch point {case let (x, y) where x == y : println("這個點在綠線上")case let (x, y) where x == -y : println("這個點在紫線上")default : println("這個點不在這2條線上")}// 列印:這個點在紫線上View Code
9.fallthrough的作用
執行完當前case後,會接著執行fallthrough後面的case或者default語句
注意:fallthrough後面的case條件不能定義變數和常量
let num = 20var str = "\(num)是個"switch num {case 0...50 : str += "0~50之間的" fallthroughdefault : str += "整數"}println(str)// 列印:20是個0~50之間的整數View Code
10.標籤
使用標籤的其中1個作用:可以用於明確指定要退出哪個迴圈
// 做2組伏地挺身,每組3個,做完一組就休息一會group :for _ in 1...2 { for item in 1...3 { println("做1個伏地挺身") if item == 2 { break group } } println("休息一會")}View Code
輸出結果是
做1個伏地挺身
做1個伏地挺身
程式碼範例:
iOS開發Swift-元群組類型和流程式控制制