Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Swift控制语句

Swift控制语句

作者头像
全栈程序员站长
发布于 2022-07-18 06:51:25
发布于 2022-07-18 06:51:25
69800
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是全栈君

前言

Swift提供了类似C语言的流程控制结构,包括可以多次执行任务的for和while循环。还有基于特定条件选择执行不同代码分支的if、guard和switch语句,还有控制流程跳转到其他代码的break和continue语句。

Swift增加了for-in循环,用来更简单地遍历数组、字典、区间、字符串和其他序列类型。

Swift的switch语句比C语言中更加强大。在C语言中,如果某个case不小心漏写了break,这个case就会贯穿至下一个case,而Swift无需写break,所以不会发生这种贯穿的情况。case 还可以匹配更多的类型模式,包括区间匹配(range matching)、元组(tuple)和特定类型的描述。switch的case语句中匹配的值可以是由case体内部临时的常量或者变量决定,也可以由where分句描述更复杂的匹配条件。

for循环(For Loops Statement)

  • for:与C语言一样的for循环
  • for-in:快速遍历集合、序列等

for-in遍历range(其中…表示闭区间[1,5]):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for index in 1...5 {
    print("\(index) times 5 is \(index * 5)")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25
// 何问起 hovertree.com
// 它可以转换for循环为:
for var index = 1; index <= 5; ++index {
   // ...
}

  若我们不要获取值,可以用下划线(_)过滤,这种用法很常见:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let base = 3
let power = 10
var answer = 1

// 三个点表示全闭区间[1, power]
for _ in 1...power {
    answer *= base
}
// 何问起 hovertree.com
// 两个点加一个<就是左闭右开[1, 5)
var sum = 0
for _ in 1..<5 {
  sum += 1
}

  常见的遍历数组方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
    print("Hello, \(name)!")
}
// 何问起 hovertree.com
// or 
for (name, index) in names.enumerate() {
   // 也是很常用的
}

  常见的遍历字典:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
    print("\(animalName)s have \(legCount) legs")
}
// 何问起 hovertree.com
// 我们知道字典中的键值对是用元组表示的,所以可以直接通过元组来访问

while循环(While Loop Statement)

  • while循环,每次在循环开始时计算条件是否符合;
  • repeat-while循环,每次在循环结束时计算条件是否符合。用法与Objective-C中的do-while完全一样。

注意:没有do-while而是repeat-while

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var index = 10
while index > 0 {
  index--
}
print(index)// 0
/* hwq2.com */
index = 0
repeat {// 没有do-while了,只有repeat-while
  print("test repeat")
  index++
} while index < 3

if条件语句(If Condition Statement)

If条件为真假值,要么为true,要么为false。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 条件只有index值为3,结果才为true,才会打印。
if index == 3 {
  print("3")
}/* hovertree.top */

guide语句(Guide Condition Statement)

guide语法与if不同,如果条件为真,则不进入else分支,否则进入。guide语义是守卫的意思,也就是说,只要满足条件,什么事都没有,否则就会进入else分支。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 在函数内部,判断必传参数为空时,直接退出函数,这种用法很常用。
guard let name = dict["name"] else {
    return
}// 何问起 hovertree.com

switch语句(Switch Statement)

swift中的Switch分支与Objective-C中的switch有很多不同的地方:

  • swift中不需要为每个case手动写break
  • swift中case支持区间匹配
  • swift中的case支持元组
  • swift中的case支持值绑定
  • swift中的case支持where条件过滤
  • swift中的case可以放置多个值

不用手写break,也不会隐式贯穿:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var value = 1
switch value {
case 1:
  print("only print 1")
case 2:
  print("only print 2")
default:
  print("on matched value")
}
// "only print 1\n"
// 何问起 hovertree.com

  支持匹配区间:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let approximateCount = 62
let countedThings = "moons orbiting Saturn"
var naturalCount: String
switch approximateCount {
case 0:
    naturalCount = "no"
case 1..<5:
    naturalCount = "a few"
case 5..<12:
    naturalCount = "several"
case 12..<100:
    naturalCount = "dozens of"
case 100..<1000:
    naturalCount = "hundreds of"
default:
    naturalCount = "many"
}
print("There are \(naturalCount) \(countedThings).")
// 输出 "There are dozens of moons orbiting Saturn."
// 何问起 hovertree.com

  支持元组,对于不需要获取的值,可以用_过滤:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let httpError = (404, "Http Not Found")
switch httpError {
case let (code, _) where code == 404:
  print(httpError.1)
case let (code, msg) where code == 502:
  print(msg)

default:
  print("default")
}// 何问起 hovertree.com

  支持值绑定:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let anotherPoint = (2, 0)
switch anotherPoint {
case (let x, 0):
    print("on the x-axis with an x value of \(x)")
case (0, let y):
    print("on the y-axis with a y value of \(y)")
case let (x, y):
    print("somewhere else at (\(x), \(y))")
}
// 输出 "on the x-axis with an x value of 2"
// 何问起 hovertree.com

  支持where过滤条件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let point = (1, 3)
switch point {
case let (x, y) where x > y:
  print("x > y")
case let (x, _) where x > 2:
  print("x > 2")
case let (1, y) where y > 4:
  print("y > 4 and x == 1")
case let (x, y) where x >= 1 && y <= 10:
  print("ok")// ok
default:
  print("error")
}// 何问起 hovertree.com

  支持一个case多个值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let numberSymbol: Character = "三"  // 简体中文里的数字 3
var possibleIntegerValue: Int?
switch numberSymbol {
case "1", "١", "一", "๑":
    possibleIntegerValue = 1
case "2", "٢", "二", "๒":
    possibleIntegerValue = 2
case "3", "٣", "三", "๓":
    possibleIntegerValue = 3
case "4", "٤", "四", "๔":
    possibleIntegerValue = 4
default:
    break
}// 何问起 hovertree.com

控制转移语句(Control Transfer Statements)

swift有五种控制转移语句:

  • continue:跳过本次循环,直接进入下一循环
  • break:中断最近的循环或者中断某个标签(下一小节说明)
  • fallthrough:用于switch分支贯穿分支
  • return:用于函数返回
  • throw:用于抛出异常

continue跳过不满足条件的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let puzzleInput = "great minds think alike"
var puzzleOutput = ""
for character in puzzleInput.characters {
    switch character {
    case "a", "e", "i", "o", "u", " ":
        continue
    default:
        puzzleOutput.append(character)
    }
}
print(puzzleOutput)
// 输出 "grtmndsthnklk"
// 何问起 hovertree.com

  用break退出循环:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for index in 1...5 {
  if index >= 3 {
    break
  }
}

// 在swift中用break,就会直接退出该swift语句
index = 10
for index in 20..<100 {
    switch index {
        case let x where x < 40:
        print(x)
    case let x where x > 100:
        break
    default:
        break
}/* hwq2.com */

  用fallthrough贯穿swift的case:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let integerToDescribe = 5
var description = "The number \(integerToDescribe) is"
switch integerToDescribe {
case 2, 3, 5, 7, 11, 13, 17, 19:
    description += " a prime number, and also"
    fallthrough
default:
    description += " an integer."
}
print(description)
// 输出 "The number 5 is a prime number, and also an integer."
/* hwq2.com */

标签语句

比如有时候需要在满足某个条件的时候就跳去执行某段代码,那么这时候用标签语句就很好用:

语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
label name: while condition {
    statements
}/* hwq2.com */

  官方的一个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gameLoop: while square != finalSquare {
    if ++diceRoll == 7 { diceRoll = 1 }
    switch square + diceRoll {
    case finalSquare:
        // 到达最后一个方块,游戏结束
        break gameLoop
    case let newSquare where newSquare > finalSquare:
        // 超出最后一个方块,再掷一次骰子
        continue gameLoop
    default:
        // 本次移动有效
        square += diceRoll
        square += board[square]
    }
}
print("Game over!")
/* hovertree.top */

检查API可用性

语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if #available(iOS 9, OSX 10.10, *) {
    // 在 iOS 使用 iOS 9 的 API, 在 OS X 使用 OS X v10.10 的 API
} else {
    // 使用先前版本的 iOS 和 OS X 的 API
}/* hovertree.top */

详细如何使用,请阅读文章:Swift检测API可用性

写在最后

本篇博文是笔者在学习Swift 2.1的过程中记录下来的,可能有些翻译不到位,还请指出。另外,所有例子都是笔者练习写的,若有不合理之处,还望指出。

学习一门语言最好的方法不是看万遍书,而是动手操作、动手练习。如果大家喜欢,可以关注哦,尽量2-3天整理一篇Swift 2.1的文章。这里所写的是基础知识,如果您已经是大神,还请绕路!

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/120312.html原文链接:https://javaforall.cn

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Swift基础 控制流程
翻译自:https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html
郭顺发
2023/07/17
1300
Swift基础语法(二)条件控制语句的认识
本章开始学习条件控制语句,包括if、while、for、Switch、guard语句。
CC老师
2022/03/15
7740
Swift基础语法(二)条件控制语句的认识
Swift讲解专题六——流程控制 原
        一种编程语言的强大与否,很大程度上取决于其提供的程序流程控制方案,就如使用汇编语言实现复杂的程序流程是一件痛苦的事情。Swift中提供了许多强大的流程控制语句,例如快速遍历for-in,while循环,repeat-while循环,switch选择等,需要注意的是,在Swift2.2中,for(a;b;c)循环已经被弃用掉,并且Swift中的Switch语句也更加强大,可以处理任意数据类型。
珲少
2018/08/15
4790
Swift系列二 - 循环控制
一、if-else if后面的条件可以省略小括号 条件后面的大括号不可以省略 let age = 10 if age >= 18 { print("大学") } else if age >= 16 { print("高中") } else { print("义务") } if后面的条件只能是Bool类型 二、while var num = 3 while num > 0 { print("num is \(num)") num -= 1 } /* 输出: n
呆呆
2021/05/27
4160
Swift学习笔记(一)
简单记录学习Swift的笔记 简单值 使用let来声明常量,使用var来声明变量。 常量或者变量的类型,必须和你赋给它们的值一样。然而,不用明确地声明类型,声明的同时赋值的话,编译器会自动推断类型。 如果初始值没有提供足够的信息(或者没有初始值),那你需要在变量后面声明类型,用冒号分割。 值永远不会被隐式转换为其他类型。如果你需要把一个值转换成其他类型,请显式转换。 例如 let label = "The width is" let width = 94 let widthLabel = label + S
Originalee
2018/08/30
4660
【Swift4】(4) 控制流 for | switch | if-else
前端修罗场
2023/10/07
1750
Swift进阶四——流程控制
我们可以使用函数stride(from:, to:, by:)来跳过不想要的标记(开区间);闭区间也同样适用,使用stride(from:, through:, by:)函数即可。
拉维
2020/12/11
8550
Swift进阶四——流程控制
swift 控制流(循环、选择等等)
if语句的代码块仅仅在 iOS 10 或 macOS 10.12 及更高版本才运行。最后一个参数,*,是必须的,用于指定在所有其它平台中,如果版本号高于你的设备指定的最低版本,if语句的代码块将会运行
xy_ss
2023/11/22
1860
Android使用ViewPager实现左右循环滑动及轮播效果
边界的时候会看到一个不能翻页的动画,可能影响用户体验。此外,某些区域性的ViewPager(例如展示广告或者公告之类的ViewPager),可能需要自动轮播的效果,即用户在不用滑动的情况下就能够看到其他页面的信息。
全栈程序员站长
2022/07/18
2.5K0
Swift基础语法(一)
Swift语言是苹果公司在Apple WWDC 2014上退出的,用来撰写MacOS和iOS应用程序。
拉维
2020/05/22
4.3K0
c#使用WebClient登录网站抓取登录后的网页
C#登录网站实际上就是模拟浏览器提交表单,然后记录浏览器响应返回的会话Cookie值,再次发送请求时带着这个会话cookie值去请求就可以实现模拟登录的效果了。
全栈程序员站长
2022/07/18
2.1K0
Swift 基础之控制流
Swift 提供了类似 C 语言的流程控制结构,包括可以多次执行任务的 for 和 while 循环,基于特定条件选择执行不同代码分支的 if 和 switch 语句,还有控制流程跳转到其他代码的 break 和 continue 语句。
网罗开发
2021/01/29
6390
Swift基础语法简化版
该网站是对Swift官方文档的翻译,但不是无脑翻译,而是结合作者的开发经验,在翻译的基础上,给出一些实用的建议。
拉维
2020/06/23
3.8K0
万字长文|Swift语法全面解析|附示例
Swift 是一门开发 iOS, macOS, watchOS 和 tvOS 应用的新语言。 swift 是一种安全,快速和互动的编程语言。 swift 支持代码预览(playgrounds),这个特性可以允许程序员在不编译和运行应用程序的前提下运行 Swift 代码并实时查看结果。
悟空聊架构
2020/07/30
3.8K0
Swift| 基础语法(二)
总结下 swift下的基础语法,里面涉及到:常量&变量、Swift中的数据类型、逻辑分支、循环、字符串相关、数组和字典、方法的书写调用等内容,考虑到阅读体验分多篇来展示,希望对大家学习swift有所帮助,同时也是对自己的一个总结。
進无尽
2018/09/12
7890
Swift3.0 - 流控制
需求二: 输入一个顶点 判断是否在X轴上,或者Y轴上,或者既不在x轴,也不再Y轴上
酷走天涯
2018/09/14
4610
02 Java 流程控制语句
else-if结构实际上是 if-else 结构的多层嵌套,它明显的特点就是在多个分支中只执行一个语句组,而其他分支都不执行,所以这种结构可以用于有多种判断结果的分支中。
acc8226
2022/05/17
7170
SQL 循环语句 while 介绍 实例
WHILE 设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。
全栈程序员站长
2022/07/18
1.7K0
Kotlin----控制语句
java 中 switch/case 需要穿透时需要列出每一个常量条件,但 kotlin中可以简化——
对话、
2022/02/22
6180
Java 控制语句
if 语句会判断括号中的条件是否成立,如果成立则执行 if 语句中的代码块,否则跳过代码块继续执行。
静默虚空
2019/05/25
1K0
相关推荐
Swift基础 控制流程
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验