if分支
判断句可以不加
()
。判断之后的执行语句必须用
{}
括起来。在判断句中必须有明确的 Bool 值(true 或者 false)。
案例一
let a = 10
// 错误写法
//if a {
// print("a")
//}
// 正确写法
if a > 9 {
print(a)
}
案例二
let score = 87
if score < 60 {
print("不及格")
} else if score <= 70 {
print("及格")
} else if score <= 80 {
print("良好")
} else if score <= 90 {
print("优秀")
} else {
print("完美")
}
案例三
// 这个是可选类型,因为只有声明成可选类型后,才可以判断是否为空
// 可选类型会在后续讲解
let view: UIView? = UIView()
// 判断如果view有值,则设置背景
// 错误写法
//if view {
// view.backgroundColor = UIColor.red
//}
if view != nil {
view!.backgroundColor = UIColor.red
}
三目运算符
简化为
? :
是对
if else
的一种简化
var a = 10
var b = 50
// 如果 a>b 成立,result = a,否则 result = b
var result = a > b ? a : b
print(result)
guard语法
guard
是 Swift 2.0 新增的语法,目的是提高程序的可读性。它与
if
语句非常类似,但不同的是当条件为false的时候执行{}里面的代码
。guard
语句必须带有else
语句,它的执行逻辑如下:当条件表达式为
true
时候跳过else
语句中的内容,执行后面的语句组。条件表达式为
false
时候执行else
语句中的内容,跳转语句一般是return、break、continue或throw
。
必须在函数范围内使用。
guard 条件表达式 else { return }
语句组
案例一
var age = 18
func online(age: Int) -> Void {
guard age >= 18 else { // guard语句这么理解:确保age大于等于18否则返回
print("回家去")
return
}
print("可以上网")
}
online(age)
案例二
func validatePassword(_ password: String) -> Bool {
// 把不符合条件的过滤掉
guard password.count >= 6 else { return false }
guard password.count <= 12 else { return false }
// 到最后就是正确的
return true
}
switch分支
介绍
switch
也是常见的分支结构,用于分支较多的情况。Swift 对
switch
进行了大大的增强,使其拥有其他语言中没有的特性。switch
后可以不跟()
,但必须有:
。case
后可以跟break
和fallthrough
。每个
case
必须包含至少一条执行语句。case
后如果是多行语句可以不加{}
。
案例
案例一
let sex = 0
switch sex {
case 0 :
print("男")
case 1 :
print("女")
default :
print("其他")
}
案例二
一个
case
判断中,可以判断多个值,它们之间用,
隔开。
let sex = 0
switch sex {
case 0, 1:
print("正常人")
default:
print("其他")
}
案例三
如果希望出现之前的
case
穿透,则可以使用关键字fallthrough
。
let sex = 0
switch sex {
case 0:
fallthrough
case 1:
print("正常人")
default:
print("其他")
}
支持多种数据类型
浮点型
let pi = 3.14
switch pi {
case 3.14:
print("π")
default:
print("not π")
}
字符串类型(字符串章节)
let m = 5
let n = 10
var result = 0
let opration = "+"
switch opration {
case "+":
result = m + n
case "-":
result = m - n
case "*":
result = m * n
case "/":
result = m / n
default:
result = 0
}
print(result)
区间判断
let score = 88
switch score {
case 0..<60:
print("不及格")
case 60..<80:
print("及格")
case 80..<90:
print("良好")
case 90..<100:
print("优秀")
default:
print("满分")
}
for循环
for in循环
for i in 0..<10 {
print(i)
}
for i in 0...10 {
print(i)
}
特殊写法
如果在
for
循环中不需要用到下标i
,可以用_
替代。
for _ in 0..<10 {
print("hello")
}
序列函数stride
常见的区间运算符主要是
...
和..<
,通过它们可以构造遍历的内容区间。可以通过
stride
返回一个序列,作用类似于区间运算符。
// from:开始 through:结束(包含) by:间隔,类似于 1...11
for i in stride(from: 1, through: 11, by: 2) {
print(i)
}
// from:开始 to:结束(不包含) by:间隔,类似于 1..<11
for i in stride(from: 1, to: 11, by: 2) {
print(i)
}
// 构造序列
let seq = stride(from: 0, to: 2, by: 1)
// 迭代器,可以逐一获取序列的值(数组、字典中还会提到)
var i = seq.makeIterator()
i.next() // 0
i.next() // 1
i.next() // nil
i.next() // nil
while循环
while循环
while
的判断句必须有正确的真假。while
后面的()
可以省略。
var a = 0
while a < 10 {
print(b)
// a++已经在Swift3之后淘汰
a = a + 1
}
repeat while循环
循环体至少执行1次
var b = 0
repeat {
print(b)
b = b + 1
} while b < 20
break与continue
二者都可以中断循环。
break
中断循环以后,后面的循环也不会执行。continue
中断循环以后,只影响当前循环,不会影响后续的循环执行。
for i in 0...10 {
if i == 5 {
break
}
print(i) // 输出 0 1 2 3 4
}
for i in 0...10 {
if i == 5 {
continue
}
print(i) // 输出 0 1 2 3 4 6 7 8 9 10
}
备注:后续文章首发于微信公众号,除了 Swift、SwiftUI、Combine、iOS开发等实用技术,也会分享一些学习心得,欢迎大家关注。
我的公众号