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学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
随机推荐
- 用户命令切换-命令su
命令su格式为su [-] username su su - su test su root
- Weex学习与实践(一):Weex,你需要知道的事
Weex学习与实践(一):Weex,你需要知道的事 http://coderyi.com/posts/weex1/ 1.命令行工具:weex-toolkit https://github.com/w ...
- datatable dataRow
DataRow[] Drs = DtStockProduct.Select(Condition11); DtResult = DtStockProduct.Clone(); datatble tabl ...
- 算法入门经典第六章 例题6-14 Abbott的复仇(Abbott's Revenge)BFS算法实现
Sample Input 3 1 N 3 3 1 1 WL NR * 1 2 WLF NR ER * 1 3 NL ER * 2 1 SL WR NF * 2 2 SL WF ELF * 2 3 SF ...
- ECMAScript prototype的一个疑问。
既然是疑问 当然首先要贴一段代码. 背景: 探究js的原型继承模式. 疑惑:为何person1和person2的prototype 居然是相等的. 附: 1.Object.create(proto, ...
- IPv6地址分配
- Java中使用MD5加密的简单实现
import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorith ...
- HDU 1576 A/B( 逆元水 )
链接:传送门 思路: 现在给出 n = A % 9973,n = A - A/9973×9973,已知 B|A ,设 A = Bx,可以得到如下形式的式子:Bx + 9973×y = n ,因为gcd ...
- BZOJ 2342 [SHOI2011]双倍回文 (回文自动机)
题目大意:略 先建出$PAM$ 因为双倍回文串一定是4的倍数,所以找出$PAM$里所有$dep$能整除4的节点 看这个串是否存在一个回文后缀,长度恰好为它的一半,沿着$pre$链往上跳就行了 暴跳可能 ...
- docker 镜像的导入导出
今天使用docker部署asp.net core应用程序时,发现当我们做好基础镜像之后需要把镜像导出到正式环境,因此学习了一下如何从docker中导出镜像: 1.首先通过docker images命令 ...