流程控制
This commit is contained in:
@@ -0,0 +1,190 @@
|
||||
//: [Previous](@previous)
|
||||
|
||||
//: ## 区间运算符
|
||||
|
||||
//: ### 闭区间运算符
|
||||
/*:
|
||||
闭区间运算符:
|
||||
a...b : a <= 取值 <= b
|
||||
*/
|
||||
|
||||
let names = ["Anna", "Alex", "Brian", "Jack"]
|
||||
for i in 0...3 {
|
||||
print(names[i])
|
||||
}
|
||||
|
||||
let a = 1
|
||||
var b = 3
|
||||
for i in a...b {
|
||||
print(names[i])
|
||||
}
|
||||
|
||||
let range = 1...3
|
||||
for i in range {
|
||||
print(names[i])
|
||||
}
|
||||
|
||||
|
||||
|
||||
// i默认是let,有时需要声明为var
|
||||
for var i in 1...3 {
|
||||
// i的值可以发生变化
|
||||
i += 5
|
||||
print(i)
|
||||
}
|
||||
|
||||
// 用不上变量,可以用_进行忽略
|
||||
for _ in 1...3 {
|
||||
print("123456")
|
||||
}
|
||||
|
||||
//: ### 半开区间运算符
|
||||
/*:
|
||||
半开区间运算符
|
||||
a..<b : a <= 取值 < b
|
||||
*/
|
||||
|
||||
|
||||
//: ### 单侧区间运算符
|
||||
/*:
|
||||
单侧区间运算符
|
||||
a... : a <= 取值
|
||||
...b : 取值 <= b
|
||||
*/
|
||||
|
||||
|
||||
//: ### 区间类型
|
||||
// 闭区间 ClosedRange
|
||||
let range1: ClosedRange<Int> = 1...3
|
||||
// 半开区间 Range
|
||||
let range2: Range<Int> = 1..<3
|
||||
// 单侧区间 PartialRangeThrough
|
||||
let range3: PartialRangeThrough<Int> = ...5
|
||||
|
||||
|
||||
//: ### 带间隔的区间值
|
||||
// 使用函数stride
|
||||
for tickMark in stride(from: 4, to: 11, by: 2) {
|
||||
print(tickMark)
|
||||
}
|
||||
|
||||
|
||||
//: ## switch
|
||||
/*:
|
||||
switch注意点
|
||||
- switch必须保证能处理所有的情况
|
||||
- 能处理所有情况的下,可以省略default
|
||||
- switch 也支持Character、String类型
|
||||
- switch 支持区间匹配以及元组匹配
|
||||
*/
|
||||
|
||||
// 默认可以不写break,并不会贯穿到后面的条件
|
||||
var num = 1
|
||||
switch num {
|
||||
case 1:
|
||||
print("number is 1")
|
||||
case 2:
|
||||
print("number is 2")
|
||||
default:
|
||||
print("number is other")
|
||||
}
|
||||
|
||||
// 使用fallthrough可以实现贯穿效果
|
||||
var number = 1
|
||||
switch number {
|
||||
case 1:
|
||||
print("number is 1")
|
||||
fallthrough
|
||||
case 2:
|
||||
print("number is 2")
|
||||
default:
|
||||
print("number is other")
|
||||
}
|
||||
|
||||
//: #### 区间匹配
|
||||
let count = 62
|
||||
switch count {
|
||||
case 0:
|
||||
print("none")
|
||||
case 1..<5:
|
||||
print ("a few")
|
||||
case 5..<12:
|
||||
print("several")
|
||||
case 12..<100:
|
||||
print("dozens of")
|
||||
case 100..<1000:
|
||||
print("hundreds of")
|
||||
default:
|
||||
print("many")
|
||||
} // dozens of
|
||||
|
||||
|
||||
|
||||
|
||||
//: #### 元组匹配
|
||||
// 可以使用下划线_ 忽略某个值
|
||||
let point = (1, 1)
|
||||
switch point {
|
||||
case (0, 0):
|
||||
print("the origin")
|
||||
case (_, 0):
|
||||
print ("on the x-axis")
|
||||
case (0, _):
|
||||
print("on the y-axis")
|
||||
case (-2...2, -2...2):
|
||||
print("inside the box")
|
||||
default:
|
||||
print( "outside of the box")
|
||||
}
|
||||
|
||||
//: ### 值绑定
|
||||
// 必要时 let 可以换为 var
|
||||
let point1 = (2, 0)
|
||||
switch point1 {
|
||||
case (let x, 0):
|
||||
print("on the x-axis with a x value of \(x)")
|
||||
case (0, let y):
|
||||
print("on the y-axis with a y value of \(y)")
|
||||
case let(x, y):
|
||||
print("somewhere else at (\(x), \(y))")
|
||||
}
|
||||
|
||||
//: ### where
|
||||
// 1. 用在case的后边
|
||||
let point2 = (1, -1)
|
||||
switch point2 {
|
||||
case let(x, y) where x == y:
|
||||
print("on the line x == y")
|
||||
case let(x, y) where x == -y:
|
||||
print("on the line x == -y")
|
||||
case let(x, y):
|
||||
print("somewhere else at (\(x), \(y))")
|
||||
}
|
||||
|
||||
//2. 对数据进行过虑
|
||||
var numbers = [10, 20, 30, -10, -30]
|
||||
var sum = 0
|
||||
for num in numbers where num > 0 {
|
||||
sum += num;
|
||||
}
|
||||
print(sum)
|
||||
|
||||
//: ### 标签语句
|
||||
// 标签语句是
|
||||
// 标签: 代码
|
||||
outer: for i in 1...4 {
|
||||
for k in 1...4 {
|
||||
if k == 3 {
|
||||
continue outer
|
||||
}
|
||||
|
||||
if i == 3 {
|
||||
break outer
|
||||
}
|
||||
|
||||
print("i == \(i), k == \(k)")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//: [Next](@next)
|
@@ -3,5 +3,6 @@
|
||||
<pages>
|
||||
<page name='01 注释'/>
|
||||
<page name='02 数据类型'/>
|
||||
<page name='03 流程控制'/>
|
||||
</pages>
|
||||
</playground>
|
Binary file not shown.
Reference in New Issue
Block a user