if-else 可以省略条件(),声明{}不能省略
if-else 条件必须是 Bool 类型,即 true false
补充:SwiftGG if 文档
- while 有两种执行方式:
while 循环开始就判断条件是否满足
while condition {
statement
}
repeat-while 循环执行完再判断条件是否满足
repeat {
statement
} while condition
- 区间运算符
- 闭区间运算符:
ClosedRange<T>,a...b,表示 a<= value <=b
- 半闭区间运算符:
Range<T>,a..<b,表示 a<= value <b
- 单边区间运算符,只有下限或者上限
PartialRangeUpTo<T>,...b,表示 ∞ value <=5
PartialRangeUpFrom<T>,a...,表示 a<= value ∞
- 字符、字符串也能使用区间运算符
let character: ClosedRange<Character> = "\0"..."~"
let str = "a"..."d"
- 区间是否包含某个值,使用
contains
let result = character.contains("a") // true
- for-in 使用
- 遍历字典是无序的,无法确定取值顺序
- 无需取值,用
_ 代替取值,默认定义的取值是 let,也可手动定义为 var
for _ in 0...4 {
// ...
}
for i in 0...4 {
// 系统默认 i 是常量,用let接收
}
for var i in 0...4 {
// 可以自定义 i 为变量,用var接收
// i = i + 1,定义为了变量,可修改
}
- 利用区间运算符,遍历数组部分元素
let names = ["小明", "小花", "小红"]
for var name in names[0...1] {
print("名字:\(name)")
}
- 不能遍历字符、字符串的区间运算符
- 有一定间隔的遍历:
let start = 0
let end = 15
let interval = 4 // 间隔为4
for i in stride(from: start, to: end, by: interval) {
print("间隔遍历:\(i)")
}
for i in stride(from: start, through: end, by: interval) {
print("间隔遍历:\(i)")
}
- 可以遍历任何集合,包括实现了 Sequence 的自定义类或者集合类型
- Switch
- 不需要显示的使用
break,因为不会隐式的贯穿,执行完一条 case,就会跳出
- 每条
case 分支都必须包含至少一条语句
- 同条
case 分支匹配多个值,符合匹配,可以用 , 分开
case 后的申明不需要用 {}
- 需要贯穿执行下条
case,使用 fallthrough 关键字
- 可以使用区间运算符、元组进行匹配
let point = (3,9)
switch point {
case (0,0):
print("坐标在原点")
case (_,0), (0,_):
print("坐标在坐标轴上")
case (-10...10, -10...10):
print("坐标在区域内")
fallthrough
default:
print("坐标在区域外")
}
- 值绑定,能将
case 的匹配值,临时声明为 let var,并在当前 case 的实现中调用
switch point {
case (let x, 0):
print("x轴上,距离:\(x)")
case (0, var y):
print("y轴上,距离:\(y)")
case (let x, let y):
print("x: \(x), y: \(y)")
}
case 中可以添加 where 做临时过滤器,只有 where 条件为 true,才会走该 case 分支
switch point {
case let (x, y) where y == 0:
print("x轴上,x: \(x),y: \(y)")
case let (x, y) where x == 0:
print("y轴上,x: \(x),y: \(y)")
case let (x, y):
print("x: \(x),y: \(y)")
}
- 同一个
case 匹配的多个值(称为复合匹配),也能进行值绑定,但是每个匹配值必须有相同的常量/变量,且类型一致,以便在执行该 case 时,使用常量/变量能对应上
switch point {
case (let value, 0), (0, let value):
print("在坐标轴上:\(value)")
case let (x, y):
print("x: \(x),y: \(y)")
}
- 多层嵌套控制流,可以使用 标签语句,指定某个控制流执行
continue break 等
// label name 是标签名,自定义
label name: while condition {
statements
}
let list = [1, 2, 3, 4, 5]
outer: for i in list {
for j in list {
if (j == i && j == 3) {
break outer
}
}
}