小说哥

导航

iOS开发Swift-元组类型和流程控制

—、元组类型

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 = 95
switch 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值是10
View 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 = 20
var str = "\(num)是个"
switch num {
case 0...50 :
    str += "0~50之间的"
      fallthrough
default :
    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个俯卧撑

代码示例:

  

 

posted on 2014-12-22 16:01  小说哥  阅读(383)  评论(0编辑  收藏  举报