目录:

  • 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):控制流的更多相关文章

  1. swift学习笔记之控制流

    控制流: 1.if语句 let count = { print("yes") }else{ print("no") } 2.switch语句 (1)Swift中 ...

  2. Swift学习笔记(7)--控制流

    1.For循环 //1.条件递增 for var index = 0; index < 3; ++index { println("index is \(index)") } ...

  3. 【swift学习笔记】二.页面转跳数据回传

    上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...

  4. Swift学习笔记(一)搭配环境以及代码运行成功

    原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...

  5. swift学习笔记1——基础部分

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  6. Swift学习笔记一

    最近计划把Swift语言系统学习一下,然后将MagViewer用这种新语言重构一次,并且优化一下,这里记录一下Swift的学习笔记. Swift和Objective-C相比,在语法和书写形式上做了很多 ...

  7. swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  8. swift学习笔记4——扩展、协议

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  9. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  10. swift学习笔记2——函数、闭包

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

随机推荐

  1. [JavaEE] Maven简介

    转载自:百度 http://baike.baidu.com/view/336103.htm?fr=aladdin 一.简介 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构 ...

  2. kettle的下载、安装和初步使用(Ubuntu 16.04平台下)(图文详解)

    不多说,直接上干货! 能够看我这篇博客的博友们,想必是已经具备一定基础了. 扩展博客 kettle的下载.安装和初步使用(windows平台下)(图文详解) kettle的下载 žKettle可以在h ...

  3. Android Studio 一些注意事项(自用,不定期更新)

    1,Android Studio 版本的选择 写这篇的时候,官方版本已经到了 v3.2.0,而我习惯使用的版本是 v2.3.1,因为这个版本有自带sdk的安装版,比较方便, 同时,v2.3.1 新建项 ...

  4. Python学习——BeautifulSoup篇

    BeautifulSoup     Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beau ...

  5. Linux apache tomcat

    [root@node1 ~]# mv jdk-7u79-linux-x64.tar.gz /usr/local/[root@node1 ~]# cd /usr/local/[root@node1 lo ...

  6. thinkphp5-----模板中函数的使用

    1.在模板中使用php函数 在thinkphp的html中,我们经常会遇到一些变量难以直接从php控制端直接处理,这些变量只有在模板中循环输出的时候处理比较合适,这个时候,我们就要在模板中使用函数 1 ...

  7. Java学习进阶—高级编程

    当你已经熟练的掌握了面向对象中的各种概念后,是否会对这些知识是如何使用的产生浓厚的兴趣?本课程主要针对于已经掌握了JAVA核心开发技术的读者准备,讲解了JAVA多线程.常用类库.IO编程.网络编程.类 ...

  8. IDEA创建Maven工程依赖jar包爆红问题

    使用IDEA创建maven工程后,在pom.xml文件中添加jar包坐标依赖后报错, 如图:

  9. ECharts树图节点过多时取消缩放,调整容器高度自适应内容变化

    问题现象 使用ECharts树图,在数据维度大,节点过多时,所看到的内容会重叠交错,无法查看. 原因 在给定ECharts树图容器尺寸后,无论数据多么庞大或者稀少,数据始终会尝试在给定容器内撑满.全部 ...

  10. python生成器,递归调用

    生成器 什么是生成器:只要在函数体内出现yield关键字,那么再执行函数就不会执行函数代码,会得到一个结果,该结果就是生成器 生成器就是迭代器 yield的功能 yield为我们提供了一种自定义迭代器 ...