原文:Swift中文教程(三)--流程控制

  Swift用if和switch编写条件控制语句,用for-in,for,while和do-while编写循环。条件控制语句和循环语句中,小括号是可选的,但花括号包住这个循环体是必须的:

 let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
if score > 50 {
teamScore += 3
} else {
teamScore += 1
}
}
teamScore

  

  If语句

  在if语句中,条件必须是布尔值,也就是说,if score { ... }这个条件句是错误的,不是一个隐式地与0比较的条件。

  你可以结合if和let来防止这种值的丢失状况。这些值意味着可选,这种可选值要么包含一个具体的值要么包含一个nil(空)来指示它的值是不存在的。在值的类型后面加上?号来表示它为可选即可:

var optionalString: String? = "Hello"
optionalString == nil var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}

练习:

将 optionalName 赋值为 nil 。会发生什么?添加一个 else 条件句在 optionalName 为 nil 时设置一个不同的值试试。

  一旦可选值为nil,条件为false时,花括号里的代码块将被跳过,否则,可选值将是未封装的并赋值给一个常量,这会让未封装的值在代码块作用域中可见。

  

  Switch语句

  Switch语句支持任何数据类型而且支持多种比较,不限于整型或相等测试:

 let vegetable = "red pepper"
switch vegetable {
case "celery":
let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber", "watercress":
let vegetableComment = "That would make a good tea sandwich."
case let x where x.hasSuffix("pepper"):
let vegetableComment = "Is it a spicy \(x)?"
default:
let vegetableComment = "Everything tastes good in soup."
}

练习:

移除default语句,看看会报什么错?

  执行满足条件的case语句后,程序自动跳出,所以,无需给每个case语句加上break。

  

  For-In语句

  使用for-in循环在字典中遍历时,提供一对名字来使用字典中的每一个名值对(如下例的number--numbers):

 let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
largest

练习:

在上例中,添加一个变量来跟踪哪一个number是最大的,即最大的值是?

  

  

  While语句

  使用while语句来重复执行一个代码块直到条件改变。条件可以置于句末以便代码至少执行一次:

 var n = 2
while n < 100 {
n = n * 2
}
n var m = 2
do {
m = m * 2
} while m < 100
m

  For语句

  for循环中可以使用索引值,利用..(两个点)或者明确声明一个初始值,条件句或增量来限制索引的范围,下面的两个循环意思一样:

 var firstForLoop = 0
for i in 0..3 {
firstForLoop += i
}
firstForLoop var secondForLoop = 0
for var i = 0; i < 3; ++i {
secondForLoop += 1
}
secondForLoop

  使用 ..(两个点)限制索引的范围并忽略最高值,而用 ...(三个点) 构造的范围则包含两个值。

谢谢,Swifter-QQ群:362232993,同好者进~

Swift中文教程(三)--流程控制的更多相关文章

  1. Java入门教程三(流程控制)

    概述 程序有 3 种结构:顺序结构.选择结构和循环结构.分别为:if elseswitch case,while与do while,for, foreach,return,break ,continu ...

  2. Swift中文教程(六)--枚举和结构

    原文:Swift中文教程(六)--枚举和结构 Enumerations 枚举 使用 enum 来创建一个枚举.跟Classes(类)和其他类型的命名方式一样,枚举也可以有Method(方法). enu ...

  3. Swift中文教程(五)--对象和类

    原文:Swift中文教程(五)--对象和类 Class 类 在Swift中可以用class关键字后跟类名创建一个类.在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文 ...

  4. Swift的基本类型和流程控制

    Swift  是一门静态的强类型语言.它以简单.干净.可读性好等特点著称. 1. 为什么是静态语言? 首先静态语言比之动态语言,更具有安全性.它不允许类型之间自动的进行转换,必须要显示的转换.Swif ...

  5. Swift中文教程(四)--函数与闭包

    原文:Swift中文教程(四)--函数与闭包 Function 函数 Swift使用func关键字来声明变量,函数通过函数名加小括号内的参数列表来调用.使用->来区分参数名和返回值的类型: fu ...

  6. Swift中文教程(一)--欢迎来到Swift的世界

    原文:Swift中文教程(一)--欢迎来到Swift的世界 Apple凌晨时在WWDC发布了Swift编程语言,语法简介我很喜欢,市面上没有完整的中文教程,我在ibooks里面下载了英文原版,现在开始 ...

  7. Swift中文教程(二)--简单值

    原文:Swift中文教程(二)--简单值 Swift使用let关键字声明常量,var关键字声明变量.常量无需在编译时指定,但至少要被赋值一次.也就是说,赋值一次多次使用: var myVariable ...

  8. Shell入门教程:流程控制(1)命令的结束状态

    在Bash Shell中,流程控制命令有2大类:“条件”.“循环”.属于“条件”的有:if.case:属于“循环”的有:for.while.until:命令 select 既属于“条件”,也属于“循环 ...

  9. 数据类型(三) + 流程控制(一) day05

    目录 昨日回顾 (三) 花式赋值 链式赋值 交叉赋值 (四) 列表list (五) 字典dict (六) 布尔值 (七) 解压缩 (八) python与用户交互的方式 (九) 三种格式化输出的方式 f ...

随机推荐

  1. Python 保存爬行动物捕捉网页

    选址的桌面壁纸网站汽车主题: 下面的两个print打开调试期间 #print tag #print attrs #!/usr/bin/env python import re import urlli ...

  2. cocos2dx-2.x CCFileUtils文件管理分析(2)

    于1于,我只是对整体结构进行了分析,然后,2于,我会在一些我们经常使用的分析功能. //获取给定文件名称的全路径 //以下这非常长一段凝视.通过举样例,像我们说明cocos2dx获取文件全路径的规则. ...

  3. 大约linux的几个问题,你能回答几个?--回复14-20称号

    14.select和poll差异?Poll和epoll的差别? (1)select和poll的差别:(參考:http://blog.csdn.net/mituan2008/article/detail ...

  4. Apple Watch开发了一些细节和总结

    本文旨在总结最近Watch在发展中遇到的问题和细节 1.左右Watch真机调试问题 一般的情况下,你为IOS主应用创建了一个extention,比方说Today Extension .Xcode都会自 ...

  5. 阿里2015在线研发project师笔试题(部分)

    今天lz去阿里的在线笔试打了一把酱油,因为lz的水平有限,时间太他么紧张了.以下把记下来的题给大家分享一下.选择题总共20道,前十题截了图,后面感觉太费时就没有再截了,凭记忆记下了两道.附加题都记录下 ...

  6. UIButton 文字图片排列

    UIButton缺省值是:图画-文字水平,所以我们并不需要调整. 1.写作-图画 水平显示,以前的文本,图片后再次 [btn setTitleEdgeInsets:UIEdgeInsetsMake(0 ...

  7. Android应用公布的准备——生成渠道包

    我们须要使用一个变量标明该app的渠道.通常我们能够在manifest中的application节点下声明.例如以下. <meta-data android:name="CHANNEL ...

  8. Android 通过应用程序来设置系统的日期和时间中的

    Android 通过应用程序来设置系统的日期和时间中的 android 2.3 android 4.0 测试可行,刚需ROOT权限. import java.io.DataOutputStream; ...

  9. codeforces 260 div2 A,B,C

    A:水的问题.排序结构.看看是否相同两个数组序列. B:他们写出来1,2,3,4,的n钍对5余.你会发现和5环节. 假设%4 = 0,输出4,否则输出0. 写一个大数取余就过了. B. Fedya a ...

  10. android可扩展自己的定义,运动图像裁剪框

    在实际项目中,常常要制作一个简易的图像裁剪功能,即获取一张图片.并用一个遮罩层选择目标范围并截取保存的功能.例如以下图所看到的: 在此分享下该自己定义视图的制作过程. 需求说明 整一个视图包括一个透明 ...