swift 控制流(循环、选择等等)

2023-11-22 09:09:15 浏览数 (2)

For-In 循环

  • 常见for-in 循环
代码语言:javascript复制
let arr = ["A","B","C"]
for value in arr {
    print(value)
}
let dic = ["key":"a","key1":"b"]
for (key,value) in dic {
    print("(key)---(value)")
}
for index in 1 ..< 3 {
    print(index)
}
  • 如果不需要序列中的每个值,则可以使用下划线代替变量名来忽略这些值
代码语言:javascript复制
var a = 2
let b = 3
for _ in 1 ... b {
    a  = b
}
print(a)
  • 可跳过不需要的打印的值
代码语言:javascript复制
//stride(from:to:by:)封闭范围是个开区间
for value in stride(from: 0, to: 10, by: 2) {
    print(value) //0    2   4   6   8
}
//stride(from:through:by:)封闭范围是个闭区间
for value in stride(from: 0, through: 10, by: 2) {
    print(value) //0    2   4   6   8    10
}

While 循环

  • While循环
代码语言:javascript复制
var a = 3
while a > 0 {
    a -= 1
    print(a)  //2  1  0
}
  • repeat- while循环,类似(do-while)
代码语言:javascript复制
var a = 0
repeat {
    a  = 1
    print(a)  //1  2  3
} while a < 3

条件语句

  • if、if...else 等
代码语言:javascript复制
let value = 5
if value > 3 {
    print("(value) is big than 3")
}


if value > 6 {
    print("(value) is big than 6")
}else{
    print("(value) is smaller than 6")
}

switch

  • 不需要在 case 分支中显式地使用break语句,当匹配的 case 分支中的代码执行完毕后,程序会终止switch语句,而不会继续执行下一个 case 分支
代码语言:javascript复制
let value = 2
switch value {
case 1:
    print(value)
case 2:
    print(value)
case 3:
    print(value)
default:
    print(value)
}
  • 单个case同时匹配2和3,可以将这个两个值组合成一个复合匹配
代码语言:javascript复制
let value = 2
switch value {
case 1:
    print(value)
case 2 , 3:
    print(value)
default:
    print(value)
}
  • case 分支的模式也可以是一个值的区间
代码语言:javascript复制
switch value {
case 1:
    print(value)
case 2 ..< 9:
    print(value)
case 10:
    print(value)
default:
    print(value)
}
  • 使用元组在同一个switch语句中测试多个值。元组中的元素可以是值,也可以是区间。另外,使用下划线(_)来匹配所有值
代码语言:javascript复制
let somePoint = (1, 1)
switch somePoint {
case (0, 0):
    print("(somePoint) 原点")
case (_, 0):
    print("(somePoint) 在x轴上")
case (0, _):
    print("(somePoint) 在y轴上")
case (-2...2, -2...2):
    print("(somePoint) 在区域里")
default:
    print("(somePoint) 在区域外")
}
  • case 分支允许将匹配的值声明为临时常量或变量,并且在case分支体内使用
代码语言:javascript复制
let anotherPoint = (0, 2)
switch anotherPoint {
case (let x, 0):
    print("x 轴的值是 (x)")
case (0, let y):
    print("y 轴的值是 (y)")
case let (x, y):
    print("点的坐标是 ((x), (y))")
}
  • 可以使用where语句来判断额外的条件
代码语言:javascript复制
let yetAnotherPoint = (1, -1)
switch yetAnotherPoint {
case let (x, y) where x == y:
    print("((x), (y)) 在 x == y线上")
case let (x, y) where x == -y:
    print("((x), (y)) 在 x == -y 线上")
case let (x, y):
    print("((x), (y)) 只是任意一点")
}
  • 复合匹配 当多个条件可以使用同一种方法来处理时,可以将这几种可能放在同一个case后面,并且用逗号隔开
代码语言:javascript复制
let stillAnotherPoint = (9, 1)
switch stillAnotherPoint {
case (let distance, 0), (0, let distance):
     print("(distance) 在轴上")
default:
     print("不是在轴上")
}  

控制转移语句

  • continue:立刻停止本次循环,重新开始下次循环
  • break:立刻结束整个循环的执行
  • fallthrough:不会检查它下一个将会落入执行的 case 中的匹配条件。fallthrough简单地使代码继续连接到下一个 case 中的代码
代码语言:javascript复制
let flag = 5
var description = "北京"
switch flag {
case 5:
    description  = "的"
    fallthrough
case 10:
    description  = "冬天"
default:
    description  = "全是霾"
}
print(description)  //北京的冬天
  • return:跳出函数
  • throw:

提前退出(guard...else)

  • 能使用if...else的地方都能使用guard...else,但是反过来未必。guard一定要和else一起使用,而且使用的地方也必须是在函数中
代码语言:javascript复制
guard *判断语句* else {
    *****
    breakreturncontinue...
}
语句组
  • 当判断语句的条件满足的时候,就会去执行语句组,但是在不满足的情况下,就会去执行else中的语句,并且必须写上break、return、continue、throw等关键字作为结束符
代码语言:javascript复制
let score = 59
guard score >= 60 else {
    print("考试不及格")   // 不满足就返回
    return
}
print(score)

整个流程都是比较清晰的,而且代码量也比if嵌套的少


检测 API 可用性

  • Swift内置支持检查 API 可用性,这可以确保我们不会在当前部署机器上,不小心地使用了不可用的API
代码语言:javascript复制
if #available(platform name version, ..., *) {
    APIs 可用,语句将执行
} else {
    APIs 不可用,语句将不执行
}
  • 在它一般的形式中,可用性条件使用了一个平台名字和版本的列表。平台名字可以是iOSmacOSwatchOStvOS。除了指定像 iOS 8 或 macOS 10.10 的大版本号,也可以指定像 iOS 8.3 以及 macOS 10.10.3 的小版本号
代码语言:javascript复制
if #available(iOS 12, macOS 10.12, *) {
    print("在 iOS 使用 iOS 12 的 API, 在 macOS 使用 macOS 10.12 的 API")
} else {
    print("使用先前版本的 iOS 和 macOS 的 API")
}

if语句的代码块仅仅在 iOS 10 或 macOS 10.12 及更高版本才运行。最后一个参数,*,是必须的,用于指定在所有其它平台中,如果版本号高于你的设备指定的最低版本,if语句的代码块将会运行

0 人点赞