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
    }
}
println(teamScore)

注意

以上代码,temaScore自己占了一行代码。这是在playground里看变量值的简单方法。

在if语句里,条件必须是一个Boolean表达式——意思是像 if score { … } 这种写法是错的,因为不能隐式地转换为0值。

你可以把 if 和 let 一起使用来处理可能不明确的值。这些值表示为可选值。可选值要么包含一个值,要么包含 nil ,表明这个值是不明确的。在值的类型后加上问号 (?) 来标记这个值是可选的。

var optionalString: String? = "Hello"
println(optionalString == nil)

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

试一试

将 optionalName 改为 nil。 greeting 是什么值? 再加一个 else

语句,如果 optionalName 是 nil ,将 greeting 设置一个不同的值。

如果可选值是 nil ,条件就为false,花括弧里的代码就会被跳过。否则,可选值被开启(unwrapped,博主注:这里的unwrapped实在不知道该如何翻译更好,这个词的原意为打开、展开,直接翻译过来感觉怪怪的,暂时称之为开启吧,貌似有的文章翻译为解析)并赋给 let 后面的常量,这个常量就可以使的开启值用在代码块里了。

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那一部分去掉。看看会有什么错误?

注意看一下 let 是怎么用来将匹配模式部分的值赋给常量的。

匹配switch case 的代码执行完以后,程序从switch语句跳出。不会执行下一个case,所以没有必要在每个case结束部分代码处显示的跳出switch。

通过提供一组用于各个键值对的名称,用 for-in 来遍历字典。字典是无序集合,所以它们的键和值通过字母表顺序来进行遍历。

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
        }
    }
}
println(largest)

试一试

增加一个变量来追踪哪种数是最大的,还有这个最大的数是多少

用 while 来重复执行一段代码直到条件改变。循环的条件也可以放到最后,以保证循环至少执行一次。

var n = 2
while n < 100 {
    n = n * 2
}
println(n)

var m = 2
do {
    m = m * 2
} while m < 100
println(m)

你可以在循环里维持一个索引——要么使用 ..< 创建一套索引或者要么写一个显示的初始化、条件和递进。这两种循环是一样的:

var firstForLoop = 0
for i in 0..<4 {
    firstForLoop += i
}
println(firstForLoop)

var secondForLoop = 0
for var i = 0; i < 4; ++i {
    secondForLoop += i
}
println(secondForLoop)

用 ..< 创建的索引忽略最大值,用 … 创建的索引包含最大值。

时间: 2024-11-11 10:47:27

Swift之旅(二)控制流的相关文章

The Swift Programming Language-官方教程精译Swift(6)控制流--Control Flow

Swift提供了类似C语言的流程控制结构,包括可以多次执行任务的for和while循环,基于特定条件选择执行不同代码分支的if和switch语句,还有控制流程跳转到其他代码的break和continue语句. 除了C里面传统的 for 条件递增循环,Swift 还增加了 for-in 循环,用来更简单地遍历数组(array),字典(dictionary),范围(range),字符串(string)和其他序列类型. Swift 的 switch 语句比 C 语言中更加强大.在 C 语言中,如果某个

8.Swift教程翻译系列——控制流之条件

3.条件语句 经常会需要根据不同的情况来执行不同的代码.你可能想要在发生错误的时候执行一段额外的代码,或者当某个值变得太高或者太低的时候给他输出出来.要实现这些需求,你可以使用条件分支. Swift提供两种方式来实现条件分支,也就是if语句和switch语句.一般来说If用在可能的情况比较少的简单条件中,当遇到复杂条件有很多种可能性的时候使用switch会更好,或者要根据模式匹配来判断要执行什么代码的时候switch也很有用. if语句 if的最简单形式只有一个单独的if条件,只有当条件为tru

Swift学习笔记(二)参数类型

关于参数类型,在以前的编程过程中,很多时间都忽视了形参与实参的区别.通过这两天的学习,算是捡回了漏掉的知识. 在swift中,参数有形参和实参之分,形参即只能在函数内部调用的参数,默认是不能修改的,如果想要修改就需要在参数前添加var声明. 但这样的声明过后,仍旧不会改变实参的值,这样就要用到inout了,传递给inout的参数类型必须是var类型的,不能是let类型或者字面类型,(字面类型是在swift中常提的一个术语,个人认为就是赋值语句,也不能修改)而且在传递过程中,要用传值符号"&

Swift初体验(二)

// 函数写法初体验 func getMyName(firstName first:String, lastName last:String) -> String{ //return first + "-" + last return first + last } var myName = getMyName(firstName: "hu", lastName: "mingtao") println("myName = \(myN

Swift语言指南(二)--语言基础之注释和分号

注释 通过注释向自己的代码中注入不可执行的文本,作为你自己的笔记或提示.Swift编译器运行时会忽略注释. Swift的注释与C语言极其相似,单行注释以两个反斜线开头: //这是一行注释 多行注释以/*开始,以*/结束: ? 1 2 3 <span style="color: rgb(0, 128, 0);">/* 这也是一条注释, 但跨越多行 */ </span> 与 C 语言的多行注释有所不同的是,Swift 的多行注释可以嵌套在其他多行注释内部.写法是在一

7.Swift教程翻译系列——控制流之循环

英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 Swift提供了类C语言类似的控制流结构.包括for循环和while循环来多次执行任务,if和switch语句根据不同的条件执行不同的分支代码,break和continue语句将执行流程跳转到其他语句. 除了C里面传统的for-条件-递增循环,Swift还增加了for-in循环使得遍历数组,字典,范围,字符串或者其他序列都很简单. Swift的switch语句也要比C语言的sw

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

原文:Swift中文教程(二)--简单值 Swift使用let关键字声明常量,var关键字声明变量.常量无需在编译时指定,但至少要被赋值一次.也就是说,赋值一次多次使用: 1 var myVariable = 42 2 myVariable = 50 3 let myConstant = 42 这里的常量赋值之后值不能更改,应该提高重用性. 一个常量或变量的值与类型必须是一致的.不过,你不需要指明它的类型,因为编译器会根据你所赋的值推断它的类型,在上面的例子中,编译器会判断到myVariable

swift 笔记 (十二) —— 下标

下标 swift允许我们为 类,结构体,枚举 定义下标,以更便捷的方式访问一大堆属性.比如Array和Dictionary都是结构体,swift的工程师已经为这两个类型提供好了下标操作的代码,所以,我们才可以通过 myArray[2]这种方式,读取和改写这个struct中保存的数据.而且,一个类型中可以定义多种下标访问方式(重载,关于重载,在后面的笔记中会提到,这里先不用太在意) 下标可以定义为"读写"型的,也可以定义为"只读"型,这种行为,是通过定义一组操作完成的

Swift 学习之二十一:?和 !(详解)

Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值, 也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化 .如果在使用变量之前不进行初始化就会报错: [plain] view plaincopyprint? var stringValue : String //error: variable 'stringValue' used before being initialized //let hashValue = stringValue.hashV

Swift开发学习(二):Playground

Swift开发学习:Playground 关于 对于软件用户.游戏玩家,大家一直都在提倡用户体验.其实软件开发者自己也是用户,是各种开发工具的使用者,也会喜欢用户体验做得好的工具软件.这次苹果想开发者所想,提供了一个可以玩转swift的游乐场--Playground,它为开发着提供了方便.提供了乐趣. 原文作者:Power 转载请保留此链接. Playground可以干什么 快速练习swift 不需要编译.不需要点击执行,编写代码后直接看效果 是不是比脚本语言还方便? 开发者可以通过Playgr