Swift学习笔记(6):控制流
目录:
- For-In
- While
- If-Else, Guard-Else
- Switch
- 控制转移
For-In
可以使用for-in语句循环遍历集合、区间、元组、字符串。
// 遍历区间,返回元素值
for index in ... {
print("(index) times 5 is (index * 5)")
} // 循环区间,忽略元素值
for _ in ...power {
answer *= base
} // 遍历数组
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
print("Hello, (name)!")
} // 遍历字典
let numberOfLegs = ["spider": , "ant": , "cat": ]
for (animalName, legCount) in numberOfLegs {
print("(animalName)s have (legCount) legs")
}
While
可以使用while和repeat-while语句进行条件循环遍历。
while square < finalSquare {
// statements ...
}
// 类似其他语言的do-while语句
repeat {
// statements ...
} while square < finalSquare
If-Else, Guard-Else
temperatureInFahrenheit =
if temperatureInFahrenheit <= {
print("It's very cold. Consider wearing a scarf.")
} else if temperatureInFahrenheit >= {
print("It's really warm. Don't forget to wear sunscreen.")
} else {
print("It's not that cold. Wear a t-shirt.")
}
可以使用guard-else语句来要求条件必须为真时,以执行guard语句后的代码。
// person字典中存在key为name的元素时打印name元素值
guard let name = person["name"] else {
return
}
print("Hello \(name)")
Switch
switch语句尝试将某个值与若干个case进行匹配,然后执行第一个匹配成功的case下的代码。
switch语句的每一个可能的值都必须至少有一个case分支与之对应。如果不可能涵盖所有值的情况时,在switch语句最后面使用默认default分支。
switch语句不存在隐式贯穿,即不需要在case下的执行代码中显示使用break。
let someCharacter: Character = "z"
switch someCharacter {
case "a":
print("The first letter of the alphabet")
// case "b": 打开注释后会有编译错误,不存在隐式贯穿
case "c","z": // 复合匹配
print("The last letter of the alphabet")
default:
print("Some other character")
}
case分支的模式也可以是一个值的区间或元组:
// case分支匹配区间
switch approximateCount {
case :
naturalCount = "no"
case ..<:
naturalCount = "a few"
default:
naturalCount = "many"
} // case分支匹配元组
let somePoint = (, )
switch somePoint {
case (, ): // 元组元素是值类型
print("(0, 0) is at the origin")
case (_, ):// 元组元素使用 _ 匹配所有任意值
print("(\(somePoint.0), 0) is on the x-axis")
case (-..., -...): // 元组元素是区间类型
print("(\(somePoint.0), \(somePoint.1)) is inside the box")
}
case分支允许将匹配的值绑定到一个临时的常量或变量,并且在case分支体内使用,还可以使用where来补充case匹配条件。
let yetAnotherPoint = (, )
switch yetAnotherPoint {
case (let x, ):
print("on the x-axis with an x value of \(x)")
case let (x, y) where x == y: // 输出 "(1, -1) is on the line x == y"
print("(\(x), \(y)) is on the line x == y")
case let (x, y):
print("(\(x), \(y)) is just some arbitrary point")
}
控制转移
• continue 结束本次循环执行下次循环
• break 结束当前switch,while语句体,不能结束多层嵌套的switch/while/if语句体。
• fallthrough 用在switch语句中,标示贯穿当前case到下一case中。
• return 返回,可终止多层嵌套的switch/while/if语句体。
• throw 抛出异常,结束执行后面的代码。
continue和break都可以跳转到指定标签的位置执行。
声明:该系列内容均来自网络或电子书籍,只做学习总结!
Swift学习笔记(6):控制流的更多相关文章
- swift学习笔记之控制流
控制流: 1.if语句 let count = { print("yes") }else{ print("no") } 2.switch语句 (1)Swift中 ...
- Swift学习笔记(7)--控制流
1.For循环 //1.条件递增 for var index = 0; index < 3; ++index { println("index is \(index)") } ...
- 【swift学习笔记】二.页面转跳数据回传
上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...
- Swift学习笔记(一)搭配环境以及代码运行成功
原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...
- swift学习笔记1——基础部分
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- Swift学习笔记一
最近计划把Swift语言系统学习一下,然后将MagViewer用这种新语言重构一次,并且优化一下,这里记录一下Swift的学习笔记. Swift和Objective-C相比,在语法和书写形式上做了很多 ...
- swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记4——扩展、协议
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记2——函数、闭包
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
随机推荐
- Bata版本
一.团队成员 1)冯鹏(组长) 201731062617 2)鲜泽 201731062612 3)李家豪 201731062614 4)郭经伟 201731062615 5)程前勇 2017310 ...
- ubuntu软件卸载方法
一.查看软件包 1.查看已安装的软件包 dpkg --list 2.查看不知道要删除软件的具体名称 dpkg --get-selections | grep <软件相关名称> 二.卸载 1 ...
- mybatis的二级缓存的使用
1.引入ehcache的jar包和mybatis整合ehcache的jar包: <!-- ehchache --> <dependency> <groupId>ne ...
- Java NIO(四)文件通道
文件通道 通道是访问I/O服务的导管,I/O可以分为广义的两大类:File I/O和Stream I/O.那么相应的,通道也有两种类型,它们是文件(File)通道和套接字(Socket)通道.文件通道 ...
- 《Exception》第八次团队作业:Alpha冲刺(第四天)
一.项目基本介绍 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 Exception 作业学习目标 1.掌握软件测试基础技术.2.学习迭代式增量软 ...
- HDU 2276 Kiki & Little Kiki 2( 矩阵快速幂 + 循环同构矩阵 )
蒟蒻的我还需深入学习 链接:传送门 题意:给出一个长度为 n,n 不超过100的 01 串 s ,每当一个数字左侧为 1 时( 0的左侧是 n-1 ),这个数字就会发生改变,整个串改变一次需要 1s ...
- HDU 4458 Shoot the Airplane( 判断点在多边形内外 )
链接:传送门 题意:这个游戏是一个2D打飞机游戏,飞机以速度 v 水平飞行,它是一个简单的多边形,玩家从( 0 , 0 )向上射击,子弹有一个出速度 b ,子弹可以看作一个点,打中飞机边缘是无法击落飞 ...
- java实现登录的验证码和猜数字游戏_图形化界面
实验任务四 1,出现设计思想 (1)先定义文本框.密码框和验证码框的组件 (2)定义面板和按钮的个数 (3)定义公有的虚构方法,通过对象实例化来调用 (4)利用Random类来实现生成0-9的随机数 ...
- 紫书 习题7-14 UVa 307(暴搜+剪枝)
这道题一开始我想的是在排序之后只在头和尾往中间靠近来找木块, 然后就WA, 事实证明这种方法是错误的. 然后参考了别人的博客.发现别人是直接暴搜, 但是加了很多剪枝, 所以不会超时. 我也想过这个做法 ...
- 前端的标配:npm是什么及其安装(含cnpm)
前端的标配:npm是什么及其安装 一:npm是什么及其来源 参考来源:npm是干什么的 总结:不需要去相关的网站下载依赖,用一个工具把这些依赖集中起来管理 NPM 的思路大概是这样的: 1)买个服务器 ...