1. if-else
- if 后面的条件只能是Bool类型;
func test() {
let num = 3
if num > 20 { // 正确 ☑️
}
if num { //错误 ✖️
}
}
- if 后面的条件可以省略小括号;
-
条件后面的大括号不能省略;
2. while
- while 条件为true才会执行括号里面的代码;
- repeat-while 相当于c语言中的do-while;
func test() {
var num = 3
while num > 0 {
print(num)
num -= 1
}
var num1 = 3
repeat {
print(num1)
num1 -= 1
} while num1 > 0
}
3. for
- 闭区间运算符:a...b ,等价于 a<= i <=b;
func test() {
let a = 0
let b = 3
for i in a...b { // i 默认是let
print(i)
}
for var i in a...b { // 可以将 i 改为变量
i += 1
print(i)
}
let range = 0...3
for i in range {
print(i)
}
// 如果用不着i 可以用 _ 省略
for _ in 0...3 {
print("hello")
}
}
- 半开区间运算符:a..<b,等价于 a<= i <b;
for i in 0..<3 {
print(i)
} // 0,1,2
- for - 区间运算符
let names = ["a", "b", "c", "d"]
for name in names {
print(name)
} // a, b, c, d
for name in names[0...3] {
print(name)
} // a, b, c, d
- 单侧区间: 让区间的一侧不做限制
let names = ["a", "b", "c", "d"]
for name in names[0...] {
print(name)
} // a, b, c, d
for name in names[...3] {
print(name)
} // a, b, c, d
for name in names[..<3] {
print(name)
} // a, b, c
let range = ...4
print(range.contains(-1)) // true
print(range.contains(5)) // false
4. 区间类型
- 闭区间类型:ClosedRange
let range1: ClosedRange<Int> = 0...3
for i in range1 {
print(i)
} // 0 1 2 3
- 半开区间类型:Range
let range2: Range<Int> = 0..<3
for i in range2 {
print(i)
}
- 单侧区间类型:PartialRangeThrough
let range3: PartialRangeThrough<Int> = ...3
// x<=3
- 字符、字符串也可以使用区间运算符,但是不能用在 for-in 中
let stringRange = "aa"..."dd"
print(stringRange.contains("bb")) // true
print(stringRange.contains("ff")) // false
5. 带间隔的区间值
func test() {
let from = 0
let through = 10
let by = 2
// 从from 开始, 每次累加by,不超过through
for i in stride(from: from, through: through, by: by) {
print(i, separator:" ", terminator: " ")
} // 0 2 4 6 8 10
}
6. switch
- case、default 后面不能写大括号{};
- 默认可以不写break,并不会贯穿到后面的条件;
- 可以使用 fallthrough,可以实现贯穿效果;
func test(age: Int) {
switch age {
case 1:
print(age)
case 2:
print(age)
fallthrough
case 3:
print(age)
default:
print("default")
}
}
- switch 必须要保证能够处理所有情况,否则报错;
- case 、default后面至少有一条语句(代码),否则报错;
- 如果不想做任何事,写break就可以;
- 如果已经保证能处理全部的情况,就不需要使用default;
- switch 也支持 String、Character类型;
var name: String = "aa"
switch name {
case "aa":
print(name)
case "bb":
print(name)
default:
print(name)
}
- 区间匹配、元组匹配
let num = 10
switch num {
case 1:
print(num)
case 2...5:
print(num)
case 6...10:
print(num)
default:
print(num)
}
let point = (1, 1)
switch point {
case (0, 1):
print(point)
case (_, 0):
print(point)
case (0, _):
print(point)
case (-1...2, -1...2):
print("(-1...2, -1...2)")
default:
print(point)
}
// (-1...2, -1...2)
// 使用 _ 来忽略某一项
- switch 值绑定
let point = (1, 1)
switch point {
case (let x, 1):
print(point)
default:
print("default point \(point)")
}
// (1, 1)
7. where
let point = (1, 1)
switch point {
case (let x, let y) where x == y:
print("x = \(x), y = \(y)")
default:
print("default point \(point)")
}
// x = 1, y = 1
8. 标签语句
out: for i in 0...4 {
for j in 0...4 {
if j == 3 {
continue out
}
if i == 3 {
break out
}
print("i = \(i), j = \(j)")
}
}
/*
i = 0, j = 0
i = 0, j = 1
i = 0, j = 2
i = 1, j = 0
i = 1, j = 1
i = 1, j = 2
i = 2, j = 0
i = 2, j = 1
i = 2, j = 2
*/
网友评论