前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >swift 控制流(循环、选择等等)

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

作者头像
xy_ss
发布2023-11-22 09:09:15
1750
发布2023-11-22 09:09:15
举报
文章被收录于专栏:浮躁的喧嚣

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 {
    *****
    break\return\continue...
}
语句组
  • 当判断语句的条件满足的时候,就会去执行语句组,但是在不满足的情况下,就会去执行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语句的代码块将会运行

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • For-In 循环
  • While 循环
  • 条件语句
  • 控制转移语句
  • 提前退出(guard...else)
  • 检测 API 可用性
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档