一、if-else
if后面的条件可以省略小括号
条件后面的大括号不可以省略
1
2
3
4
5
6
7
8let age = 10
if age >= 18 {
print("大学")
} else if age >= 16 {
print("高中")
} else {
print("义务")
}if后面的条件只能是Bool类型
二、while
1 | var num = 3 |
- swift中没有
do-while
,相同逻辑的是repeat-while
- swift3开始,去除了自增(++),自减(–)运算符
- 不要再使用
num++
,num--
,++num
,--num
等运算符了 - 自增自减运算符在不同平台有不一样的效果,所以swift放弃了使用
- 不要再使用
1 | var num = -1 |
三、for
3.1. 区间运算符
格式:a...b
(a <= 取值 <= b)
- 变量默认是let修饰,可以自己根据情况修改为var
1 | // 常规用法 |
3.2. 半开区间运算符
格式:a..<b
(a <= 取值 < b)
1 | for i in 1..<3 { |
3.3. 区间运算符用在数组上
1 | // 此处只是示例用法,实际应用时应注意数组越界 |
3.4 单侧区间:让区间朝一个方向尽可能的远
1 | // 常规闭区间 |
四、区间类型(Range)
- 范围代表的是两个值的区间,它由上下边界进行定义;
- 不能对 Range 或者 ClosedRange 进行迭代,但是我们可以检查某个元素是否存在于范围中;
- Range 和 ClosedRange 既非序列,也不是集合类型。有一部分范围确实是序列是因为 0..<10 的类型其实是一个 CountableRang。CountableRange 和 Range 很相似,只不过它还需要一个附加约束:它的元素类型需要遵守 Strideable 协议 (以整数为步⻓)。Swift 将这类功能更强的范围叫做可数范围,这是因为只有这 类范围可以被迭代。可数范围的边界可以是整数或者指针类型,但不能是浮点数类型,这是由 于 Stride 类型中有一个整数的约束。如果你想要对连续的浮点数值进行迭代的话,你可以通过 使用 stride(from:to:by) 和 stride(from:through:by) 方法来创建序列用以迭代。
– | 半开 | 闭合 |
---|---|---|
Comparable | Range | ClosedRange |
Strideable(以整数为步长) | CountableRange | CountableClosedRange |
4.1. 同时省略掉上、下两个边界,这样你将会得到整个集合类型的切片
1 | let arr = [1,2,3,4] |
1 | // 半开区间 |
4.2. 字符、字符串也能使用区间运算符,但默认不能用在for-in中
1 | let stringRange1 = "cc"..."ff" |
4.3 带间隔的区间值
1 | let startValue = 0 |
五、switch
5.1. case、default后面不能写大括号(编译器会报错)
5.2. 默认情况下可以不写break,并不会贯穿到后面的条件
1 | enum HeaderCode {case success, failure, redirect, connect} |
5.3. 如果需要贯穿,怎么办?fallthrough
1 | enum HeaderCode {case success, failure, redirect, connect} |
5.4. case、default后面至少要有一条语句
5.5. switch必须要保证能处理所有情况
- 如果不想做任何事,加个break即可
- 如果能保证已处理所有情况,也可以不使用default
1
2
3
4
5
6
7
8
9
10
11
12enum HeaderCode {case success, failure, redirect, connect}
let code = HeaderCode.success
switch code {
case .success:
break
case .redirect:
print("redirect")
case .connect:
print("connect")
case .failure:
print("failure")
}
5.6. 复合条件(switch支持Character、String类型)
1 | // String |
5.7. 区间匹配、元组匹配
1 | // 区间匹配 |
- 可以用下划线(
_
)忽略某个值 - 值绑定(必要时let可以改为var)
1
2
3
4
5
6
7
8
9
10
11
12let point1 = (2, 0)
switch point1 {
case (let x, 0):
print("on the x-axis and x value of \(x)")
case (0, let y):
print("on the y-axis and y value of \(y)")
case (let x, let y):
print("at (\(x), \(y))")
}
/*
输出:on the x-axis and x value of 2
*/
六、where(过滤)
1 | let point = (1, -1) |
七、标签语句
1 | side: for i in 1...4 { |