Swift流程控制

一、if-else

  • 和OC不同,if语句后面可以省略()小括号
  • if关键字后面的条件必须是Bool类型,不再像OC等其他语言那样非零即真
  • 条件后面的大括号不能省略
let age = 20
if age >= 22 {
    print("该结婚了")
} else if age >= 18 {
    print("刚刚成年")
} else if age >= 7 {
    print("该上学了")
} else {
    print("还是个孩子")
}
// 刚刚成年

二、循环语句

2.1 while和repeat-while循环

  • while循环
var num = 5
while num > 0 {
    print("num is \(num)")
    num -= 1
} // 打印5次
  • repeat-while循环
  • 和OC/C 语言中的while循环类似,都会先执行一次循环体中的代码,再进行循环条件判断
var value = 10
repeat {
    print("value is \(value)")
} while value > 10 
// value is 10 只打印1次

从Swift3开始,++自增和--自减运算符被去除掉了,所以新版本的Swift中不能使用这2个运算符了

2.2 for循环

  • 闭区间运算符 a...b ,[a, b],a <= 取值 <=b
let names = ["Anna", "Alex", "Brain", "Jack"]
// i的取值 0 1 2 3
for i in 0...3 {
    print(names[i])
} // Anna Alex Brain Jack
  • 定义一个range常量,存储区间范围
let range = 1...3
for i in range {
    print(names[i])
} // Alex Brain Jack
  • 如果只是单纯的做循环操作,而不使用索引的值,可以使用_忽略
for _ in range {
    print("for循环")
} // 打印3次 for循环
  • 区间之间的值,不仅可以使用纯数字,也可以使用定义的常量/变量
let a = 1
let b = 2
for i in a...b {
    print(names[i])
} // Alex Brain

for i in a...3 {
    print(names[i])
} // Alex Brain Jack
  • for循环中声明的 i 默认是let声明的常量,可以使用var修改为变量,之后在循环体中就可以修改i的值了
for var i in 1...5 {
    i += 2
    print(i)
} // 3 4 5 6 7
  • 半开区间运算符 [a, b),a <= 取值 < b
for i in 1..<5 {
    print(i)
} // 1 2 3 4 
  • 区间运算符用在数组上,注意不要越界
for name in names[0...3] {
    print(name)
} // Anna Alex Brain Jack
  • 如果区间运算符右侧/左侧没有设置边界(单侧区间),那么默认就是数组的边界
for name in names[2...] {
    print(name)
} // Brain Jack

for name in names[...2] {
    print(name)
} // Anna Alex Brain

for name in names[..<2] {
    print(name)
} // Anna Alex
  • 定义一个单侧区间,range的范围就是负无穷到5
let range = ...5
range.contains(1) // true
range.contains(7) // false
range.contains(-10) // true
  • 区间类型(了解),各个区间的具体类型
// 区间类型
let range3: ClosedRange<Int> = 1...3
let range4: Range<Int> = 1..<3
let range5: PartialRangeThrough<Int> = ...3

2.3 字符和字符串类型也能使用区间运算符,但默认不能用在for-in中

let str = "cc"..."ff"
str.contains("cb") // false
str.contains("dz") // true
str.contains("fg") // false

let str2 = "a"..."f"
str2.contains("b") // true
str2.contains("g") // false

let c: ClosedRange<Character> = "A"..."Z"
c.contains("a") // false
c.contains("G") // true
  • 带间隔的区间值,从2开始到hours结束,间隔是hourInterval
let hours = 11
let hourInterval = 2
for i in stride(from: 2, through: hours, by: hourInterval) {
    print(i)
} // 2 4 6 8 10

三、switch

  • Swift中的switch可以不在case后写break,默认是不会贯穿的
  • casedefault后面不需要写{}
let num = 1
switch num {
case 1:
    print("number is 1")
case 2:
    print("number is 2")
default:
    print("number is other")
} // number is 1
  • 如果想要达到贯穿的效果,可以使用关键字fallthrough

```swift
let num = 1;
switch num {
case 1:
print("number is 1")
fallthrough
case 2:
print("number is 2")
case 3:
print("numer is 3")
default:
print("number is other")

top Created with Sketch.