控制流语句
1 repeat
repeat{
}while( )
while()里是个Bool值,当true时重复执行repeat{.....}语句
2 guard
guard 条件 else{
return
}
当条件成立时执行后面,否则执行else里的语句,类似于if {}else {},但只有一个代码块
写了个实例
import Foundation
struct Gas {
var name:String = "35号"
var gaslitre:Int? = 100
}
//模拟行车
struct Car{
var distance = 1000 //距目的地距
var gas:Gas? = Gas(name: "35", gaslitre: 100)
var state:Bool{return gas!.gaslitre > 0 && distance > 0} //行车状态 true行驶 false油量为零停止行驶
//行驶
mutating func drive(){
guard gas!.gaslitre > 0 && distance > 0 else{
print("停车")
return
}
distance -= 9
gas!.gaslitre! -= 1
//当油量为零时将油量赋值为空
if gas?.gaslitre == 0{
gas?.gaslitre = nil
}
print("距离目的地\(distance)~~~~剩余油量\(gas!.gaslitre)")
}
}
var car = Car()
//控制流 repeat “当行车状态为true的时候不断行驶”
repeat{
car.drive()
}while(car.state)
struct GasStation {
func refuel(let car:Car){
/*
guard 与 if 对比
把下面语句改为if:
if let gasname = car.gas?.name,let gaslitre = car.gas?.gaslitre{
print("正在加\(gasname)号汽油--\(gaslitre)升")
}else{
print("请提供加油信息")
}
区别:
guard更能准确表达信息
gasname,gaslitre在guard验证后可以在整个方法内使用,而if验证后只能在if语句块中使用
*/
guard let gasname = car.gas?.name else{
print("请问你需要的汽油型号?")
return
}
guard let gaslitre = car.gas?.gaslitre else{
print("请问需要多少升汽油")
return
}
print("正在加\(gasname)号汽油--\(gaslitre)升")
}
}
let gasstation = GasStation()
gasstation.refuel(car)