swift-控制流程03-switch
2016-02-23 14:53
381 查看
import UIKit
class ViewController:
UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
/**
switch 试图把某个值与若干个模式(pattern)进行匹配。
如果第一个模式匹配成功,switch
语句会执行对应的代码。
switch 语句最简单的形式就是把某个值与若干个相同类型的值作匹配:
switch 语句由若干个 case
构成。
每个 case
都是一条分支,与if语句类似。
switch 语句会决定哪一条分支应该被执行。
switch 语句必须是完整的。这就是说,每一个可能的值都必须至少有一个 case
与之对应。
在不能覆盖所有值的情况下,使用默认(default)分支处理,默认分支只能在 switch
语句的最后面。
*/
let a = 0
switch a {
case 1,2 :
print("case 1,2 a =
\(a)")
case 3,4 :
print("case 3,4 a =
\(a)")
case 5,6 :
print("case 5,6 a =
\(a)")
case 7,8 :
print("case 7,8 a =
\(a)")
case 9,10 :
print("case 9,10 a =
\(a)")
default :
print("default == a =
\(a)")
}
/**
Swift 的 switch
与 C
语言和 Objective-C
是不同的。
当匹配的 case
分支中的代码执行完毕后,switch就终止了,不会继续执行下一个 case
分支。
这也就是说,不需要在 case
分支中显式地使用 break
语句。
这使得 switch
语句更安全、更易用,也避免了因忘记写 break
语句而产生的错误。
当然也可以在 case
分支中的代码执行完毕前 break
break之后的代码就不执行了,
如果一个case没有执行的语句,就写下一个case,会报错
避免从一个 case
分支贯穿到另外一个,使代码更安全、更直观
*/
//MARK:
范围匹配
/*
case 分支的模式也可以是一个值区间
*/
let count = 18
switch count {
case 1...5 :
print("1~5 count==\(count)")
case 6...10 :
print("6~10 count==\(count)")
case 11...15 :
print("11~15 count==\(count)")
case 16...20 :
print("16~20 count==\(count)")
default:
print("default count==\(count)")
}
/**
switch 语句中可以使用
元组 测试多个值。
元组中的元素可以是值,也可以是区间。另外,使用下划线(_)来匹配所有可能的值。
Swift 允许多个 case
匹配同一个值。
实际上,在这个例子中,点(0, 0)可以匹配所有四个 case。
但是,如果存在多个匹配,那么只会执行第一个被匹配到的 case
分支。
考虑点(0, 0)会首先匹配case (0, 0),因此剩下的能够匹配(0, 0)的
case 分支都会被忽视掉
*/
let point = (1,0)
switch point {
case (0,0) :
print("在原点上")
case (_,0) :
print("在x轴上")
case (0,_):
print("在y轴上")
case (-2...2,-2...2) :
print("在矩形区域内")
default:
print("在矩形区域外")
}
//MARK:
值绑定
/**
值绑定(value binding):case
分支允许将要匹配的值绑定给临时常量或变量,这些常量或变量在该 case
分支可以被引用
*/
let point1 = (2,3)
switch point1 {
case (let x ,
0) :
print("在y轴上
x==\(x)")
case ( 0 ,let y) :
print("在x轴上
y==\(y)")
case (let x,let y) :
print("没有在轴上 x==\(x),y==\(y)")
}
/**
这三个 case
都声明了常量 x 和 y
的占位符,用于临时获取元组 point1
的一个或两个值。
第一个 case ——case (let x, 0)将匹配一个纵坐标为0的点,并把这个点的横坐标赋给临时的常量x。
第二个 case ——case (0, let y)将匹配一个横坐标为0的点,并把这个点的纵坐标赋给临时的常量y。
一旦声明了这些临时的常量,它们就可以在其对应的 case
分支里引用。
在这个例子中,用print进行打印。
这个switch语句不包含默认分支。
这是因为最后一个 case ——case let(x, y)
可以匹配余下所有值的元组。
这使得 switch
语句已经完整了,因此不需要默认分支
在上面的例子中,x
和 y 是常量,这是因为没有必要在其对应的 case
分支中修改它们的值。
它们也可以是变量 ——
程序会创建临时变量,并用相应的值初始化它。
修改这些变量只会影响其对应的 case
分支。
*/
/**
case 分支模式可以使用 where
语句判断额外的条件
*/
let point2 = (-4,4)
switch point2 {
case let(x,y)
where x==y :
print("x==y
在正对角线上")
case let(x,y)
where x == -y :
print("x==-y
在负对角线上")
case let(x,y) :
print("不在对角线上")
}
/*
在上面的例子中,switch
语句会判断某个点是否在正对角线 x == y
上,
是否在负对角线 x == -y
上,或者不在对角线上。
这三个 case
都声明了常量 x 和 y
占位符,用于临时获取元组 point2
的两个值。
这些常量被用作 where
语句的一部分,从而创建一个动态的过滤器 (filter)。
当且仅当 where
语句的条件为 true 时,匹配到的 case
分支才会被执行。
就像是值绑定中的例子,由于最后一个 case
分支匹配了余下所有可能的值,
switch 语句就已经完备了,因此不需要再书写默认分支
*/
}
}
class ViewController:
UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
/**
switch 试图把某个值与若干个模式(pattern)进行匹配。
如果第一个模式匹配成功,switch
语句会执行对应的代码。
switch 语句最简单的形式就是把某个值与若干个相同类型的值作匹配:
switch 语句由若干个 case
构成。
每个 case
都是一条分支,与if语句类似。
switch 语句会决定哪一条分支应该被执行。
switch 语句必须是完整的。这就是说,每一个可能的值都必须至少有一个 case
与之对应。
在不能覆盖所有值的情况下,使用默认(default)分支处理,默认分支只能在 switch
语句的最后面。
*/
let a = 0
switch a {
case 1,2 :
print("case 1,2 a =
\(a)")
case 3,4 :
print("case 3,4 a =
\(a)")
case 5,6 :
print("case 5,6 a =
\(a)")
case 7,8 :
print("case 7,8 a =
\(a)")
case 9,10 :
print("case 9,10 a =
\(a)")
default :
print("default == a =
\(a)")
}
/**
Swift 的 switch
与 C
语言和 Objective-C
是不同的。
当匹配的 case
分支中的代码执行完毕后,switch就终止了,不会继续执行下一个 case
分支。
这也就是说,不需要在 case
分支中显式地使用 break
语句。
这使得 switch
语句更安全、更易用,也避免了因忘记写 break
语句而产生的错误。
当然也可以在 case
分支中的代码执行完毕前 break
break之后的代码就不执行了,
如果一个case没有执行的语句,就写下一个case,会报错
避免从一个 case
分支贯穿到另外一个,使代码更安全、更直观
*/
//MARK:
范围匹配
/*
case 分支的模式也可以是一个值区间
*/
let count = 18
switch count {
case 1...5 :
print("1~5 count==\(count)")
case 6...10 :
print("6~10 count==\(count)")
case 11...15 :
print("11~15 count==\(count)")
case 16...20 :
print("16~20 count==\(count)")
default:
print("default count==\(count)")
}
/**
switch 语句中可以使用
元组 测试多个值。
元组中的元素可以是值,也可以是区间。另外,使用下划线(_)来匹配所有可能的值。
Swift 允许多个 case
匹配同一个值。
实际上,在这个例子中,点(0, 0)可以匹配所有四个 case。
但是,如果存在多个匹配,那么只会执行第一个被匹配到的 case
分支。
考虑点(0, 0)会首先匹配case (0, 0),因此剩下的能够匹配(0, 0)的
case 分支都会被忽视掉
*/
let point = (1,0)
switch point {
case (0,0) :
print("在原点上")
case (_,0) :
print("在x轴上")
case (0,_):
print("在y轴上")
case (-2...2,-2...2) :
print("在矩形区域内")
default:
print("在矩形区域外")
}
//MARK:
值绑定
/**
值绑定(value binding):case
分支允许将要匹配的值绑定给临时常量或变量,这些常量或变量在该 case
分支可以被引用
*/
let point1 = (2,3)
switch point1 {
case (let x ,
0) :
print("在y轴上
x==\(x)")
case ( 0 ,let y) :
print("在x轴上
y==\(y)")
case (let x,let y) :
print("没有在轴上 x==\(x),y==\(y)")
}
/**
这三个 case
都声明了常量 x 和 y
的占位符,用于临时获取元组 point1
的一个或两个值。
第一个 case ——case (let x, 0)将匹配一个纵坐标为0的点,并把这个点的横坐标赋给临时的常量x。
第二个 case ——case (0, let y)将匹配一个横坐标为0的点,并把这个点的纵坐标赋给临时的常量y。
一旦声明了这些临时的常量,它们就可以在其对应的 case
分支里引用。
在这个例子中,用print进行打印。
这个switch语句不包含默认分支。
这是因为最后一个 case ——case let(x, y)
可以匹配余下所有值的元组。
这使得 switch
语句已经完整了,因此不需要默认分支
在上面的例子中,x
和 y 是常量,这是因为没有必要在其对应的 case
分支中修改它们的值。
它们也可以是变量 ——
程序会创建临时变量,并用相应的值初始化它。
修改这些变量只会影响其对应的 case
分支。
*/
/**
case 分支模式可以使用 where
语句判断额外的条件
*/
let point2 = (-4,4)
switch point2 {
case let(x,y)
where x==y :
print("x==y
在正对角线上")
case let(x,y)
where x == -y :
print("x==-y
在负对角线上")
case let(x,y) :
print("不在对角线上")
}
/*
在上面的例子中,switch
语句会判断某个点是否在正对角线 x == y
上,
是否在负对角线 x == -y
上,或者不在对角线上。
这三个 case
都声明了常量 x 和 y
占位符,用于临时获取元组 point2
的两个值。
这些常量被用作 where
语句的一部分,从而创建一个动态的过滤器 (filter)。
当且仅当 where
语句的条件为 true 时,匹配到的 case
分支才会被执行。
就像是值绑定中的例子,由于最后一个 case
分支匹配了余下所有可能的值,
switch 语句就已经完备了,因此不需要再书写默认分支
*/
}
}
相关文章推荐
- swift-控制流程02-while循环
- swift Xcode新建playground报错
- swift-控制流程01-for循环
- Swift:如何判断一个对象是否是某个类(或其子类)的实例
- 【iOS】swift-文字宽度的计算
- 【iOS】swift-文字宽度的计算
- iOS 开发 -- Swift 语法篇 (二) 可选项
- swift-集合类型03-字典和数组
- swift-集合类型02-字典的基本操作
- Swift中文教程(十五) 析构
- Swift中文教程(十四) 初始化
- Swift中文教程(十三) 继承
- swift-集合类型01-数组的基本操作
- [Swift]基础
- Swift初体验(三)
- swift学习
- swift学习笔记-UI篇之UIImageView
- swift-字符串02-字符串的插值,连接,长度
- Swift开发IOS的细节
- swift-基本操作03-区间和逻辑运算符