【游戏客户端开发】 IOS开发——Swift基础篇2

来源:互联网 发布:蜂窝移动网络收费吗 编辑:程序博客网 时间:2024/06/03 22:54

IOS开发——Swift基础篇2

  1. Playground的创建和使用
  2. 常量、变量和字符串
  3. 简单类型和类型推断
  4. 流程控制

1. Playground的创建和使用

在上一篇中我们已经大致讲解过了Playground的作用了,现在我们就开始利用这个工具来学习Swift的语法。 
首先,我们要说的是如何创建一个新的Playground,其实步骤很简单:

  • 打开Xcode6,一次点击File->New->Playground…,即弹出如下图所示界面: 
    这里写图片描述

  • 输入Playground的名称,并点击Next,选择保存此文件的目录并点击Create,即完成了一个Playground的创建: 
    这里写图片描述

  • 创建出来的Playground实际上是一个以.playground为后缀的文件,我们知道Playground是Xcode内置的一个程序,当你安装了Xcode之后,Playground就已经内置其中。 
    这里写图片描述

2. 常量、变量和字符串

在Swift中我们分别用let、var来声明常量和变量,而且Swift中允许使用任何Unicode字符作为变量和常量的名字,甚至包括不属于ASCII编码的字符,例如:中文(var 哈哈=”value”)。

  • 常量 
    常量的声明一般伴随着赋值操作,而且其初始值一旦给定就不允许再改变。此外,常量并不是可计算的属性,因此不会包含getter和setter方法,其声明方式如下:
<code class="hljs bash has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">let</span> 常量名:类型 = 表达式</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

其中的:类型指的是数据类型,是可选的(即可有可没有,有的时候为显式声明,没有的时候则为推断声明)。此外,常量的声明还可以是元组的形式,但元组中的每一项都必须进行初始化:

<code class="hljs erlang has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-title" style="box-sizing: border-box;">let</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(first<span class="hljs-variable" style="box-sizing: border-box;">Number</span>,second<span class="hljs-variable" style="box-sizing: border-box;">Number</span>)</span> = <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>)</span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

常量可以用static修饰,这样的常量成为静态常量。

  • 变量 
    以var作为关键字来声明,格式如下:
<code class="hljs fix has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-attribute" style="box-sizing: border-box;">var 常量名:类型 </span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;"> 表达式</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

与常量一样,声明中的:类型指的是数据类型,是可选的。但与常量不同的是,变量声明中的初始化也是可选的。而且当变量声明中没有初始化是,必须声明其数据类型。 
变量可以被声明为:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">var</span> 变量名:type{    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">get</span>{        语句    }    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">set</span>(setter name){        语句    }}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>

在这种情况下,我们称这种变量为计算型变量,变量的值有get/set方法中的语句决定。

  • 分号 
    在Swift中,虽然“;”分号仍然是语句结束符,但在Swift并非必须的,因为换行即可表示语句的结束,只有当需要在同一行中写多个语句时,分号才是必须的。

  • 字符串 
    相较于Objective-C,Swift中的字符串去掉了“@”前缀:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">var</span> name = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Microle"</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

而且对比字符串的方法无需使用isEqualToString方法,而直接用“==”进行对比:

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(name <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Who"</span>){    <span class="hljs-attribute" style="box-sizing: border-box;">...</span><span class="hljs-attribute" style="box-sizing: border-box;">...</span>}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

向字符串中插入值和运算: 
我们使用表达式“(表达式)”这样的占位符来实现插入字符串的功能,插入的内容是表达式的计算结果:

<code class="hljs bash has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">let</span> x=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">let</span> message = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\(x)乘以2.5等于\(Double(x)*2.5)"</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

字符串的连接操作,我们使用“+”和“+=”运算符来实现:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">var</span> s = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"hello"</span>s += <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"world"</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

通常我们需要计算字符串的长度,在Swift中我们使用countElements。如果需要一个Objective-C中NSString的length属性一样的长度,则需要使用bridgeToObjectiveC方法:

<code class="hljs erlang has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-title" style="box-sizing: border-box;">println</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\(string.bridgeToObjectiveC().length)"</span>)</span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

3. 简单类型和类型推断

1) 数值类型 
Swift中常见的数据类型有:整型、Double和Float

  • 整型 
    用Int声明:
<code class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">var</span> radius:Int = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">var</span> radius = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

以上两个语句声明的结果都是相同的,第一句中在声明时就指定变量类型的方式称为显式方式,而在第二句中虽然没有指定变量数据类型,但是编译器在编译时通过变量所赋值的数据类型来推断变量的类型,编译器的这种行为称为“类型推断”。应该尽量使用类型推断的方式来声明常量或者变量,这样可以让代码更为整洁。 
整型数据有一系列的精度:8位有符号整型Int8、8位无符号整型UInt8等。使用Int来声明变量,即为不指定其具体精度,由编译器根据具体赋值情况决定其精度。

  • Double 
    Swift中的双精度浮点数,也是编译器首选的浮点类型。非显式声明且赋值带小数点时,编译器会自动将所声明变量推断为Double类型:
<code class="hljs fix has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-attribute" style="box-sizing: border-box;">var a </span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;"> 3.14</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>
  • Float 
    Swift中的单精度浮点数,必须使用显式方式声明变量:
<code class="hljs fix has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-attribute" style="box-sizing: border-box;">var b:Float </span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;"> 3.5</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>
  • 千位分隔符 
    在Swift中,可以在数字中使用下划线作为千位分隔符:
<code class="hljs fix has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-attribute" style="box-sizing: border-box;">var a </span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;"> 1_000_000</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>
  • 布尔类型 
    Bool是Swift中的布尔值,表示true或false,例如:
<code class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">var</span> b = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

在其他编程语言中,可以把非0的值当做true,把0当做false,但是在Swift中不能用整数来对Bool类型赋值。同时,在需要用布尔值控制流程的地方,也不能用整数来代替。

  • 区间 
    定义了某种有序类型的子集,在Swift中区间分为两种:半闭区间和全闭区间。 
    半闭区间:使用..<符号定义:var range = 1..<5,表示从1到5(不包括5)的一系列循序递增的整数。等同于:var range = Range(start:1,end:5); 
    全闭区间使用…符号定义:var range = 1...5,相较于半闭区间,全闭区间包括了5; 
    区间常用于流程控制语句中,例如for in和switch中。

  • 元组(tuple) 
    是Swift中的一种特殊的数据类型,类似与字典,把多个值存储在一起,然后通过索引或者键的方式可以访问元组中的每个值。不同于与字典的是,元组中的值可以是任意类型,并不要求必须是相同类型。 
    声明元组:let iata_pek = {"PEK","北京国际机场"},访问元组成员的方法可以通过“.元素所在的索引”,例如:iata_pek.0iata_pek.1 
    元组也可以更加字典化地声明:let iata_pek = {code:"PEK",airport:"北京国际机场"},此时可以通过“.成员名”的方式访问成员:iata_pek.code 
    元组分解:可以说分解就是元组声明的逆过程,将元组中的元素拆分成多个变量,这样方便对其成员的访问:let (code,airport) = iata_pek,那么获取成员变量就变成:println("编码:\(code),机场:\(airport)"),在分解时可以用下划线忽略元组中的某部分成员:let (_,airport) = iata_pek

2). 类型转换 
在 Swift中,操作符也是函数的一种,例如“ * ”乘法操作,假如是Double类型数据的乘法操作,实际上就是调用了Double类中的“ * ” 方法:

<code class="hljs vbnet has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">func *(lhs:<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Double</span>,rhs:<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Double</span>) -> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Double</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

所以Swift中不支持不同类型数据的直接相乘,在Objective-C中这种类型转换是自动的,而在Swift中这种隐式转换已经被取消了。所以程序员需要使用到显式的类型转换:

<code class="hljs vbnet has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">var area = <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Double</span>(radius)*<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Double</span>(radius)*pi</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

此外,Swift还提供了溢出检查,如Int的“自溢式”赋值:Int.max这是Int的上限值。

4. 流程控制

在Swift中提供的流程控制结构包括:for、while/do while、if/if else和swicth,以及跳转使用的break和continue。此外,Swift中还加入了for-in循环,而且Swift中的switch无须写break,因此无论如何都不会发生case贯穿的行为。

  • for循环 
    分为两种,一是经典型:
<code class="hljs r has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> var index = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; index < <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>;index ++{    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span>}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

另一种是快速迭代的for in循环,通常用于快速迭代数组和字典:

<code class="hljs bash has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">let</span> animals = [<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"tiger"</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"lion"</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"leopad"</span>]<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> animal <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> animals{    println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\(animal)"</span>)}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

其中的变量animal你不用声明,因为其是隐式声明的,且不能再循环体之外使用。for in循环甚至还可以变量字典中的键和值:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (key,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">value</span>) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> dictionary{    println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"key:\(key),value:\(value)"</span>)}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

for in循环还可以对字符串进行迭代,相当于将字符串中的字符逐个取出:

<code class="hljs r has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> character <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"HelloWorld"</span>{    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span>}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

当迭代变量在循环中不会被使用到,可以用下划线来代替:

<code class="hljs r has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> _ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> animals{    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span>}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>
  • while语句 
    在Swift中支持while和 do while:
<code class="hljs r has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span> a<<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span> {    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span>}//或者do{    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span>}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span> a<<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul>
  • if 语句 
    Swift中的if语句有多种形式,例如:if、if..else、if…else if…else等。与Objective-C对比的区别就是少了条件表达式的括号,但是在Swift中的{}大括号不允许省略

  • switch语句 
    Swift中的switch最突出的特点是每个case之后的break语句可以省略,因为每次进入switch中只会执行一个case然后就退出switch流程,不存在多个case贯穿执行的情况,正因为这样,所以有两点在Swift中要特别注意的:一是,Swift中的每个分支至少得有一条语句,即不能多个case公用一条语句,否则编译器会报错;二是,default分支是必须的,若不想在default中自行处理,可以直接加上break语句。 
    此外,Swift中的switch除了匹配简单的整型数据之外,还能匹配浮点数

<code class="hljs go has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">let i =<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;"> 3.14159</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">switch</span> i{    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;"> 3.14159</span>:        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\(i):是圆周率"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;"> 1.41421</span>:        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\(i):是圆周率"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">default</span>:        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\(i):不明白是什么意思"</span>)}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>

合并分支:当有多个分支其实进行的是相同的处理时,我们可以将这些分支进行合并:

<code class="hljs go has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">let i =<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;"> 19</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">switch</span> i<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">%9</span> {    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;"> 1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">,2</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">,3</span>:        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\(i)分在第一组"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;"> 4</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">,5</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">,6</span>:        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\(i)分在第二组"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">default</span>:        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\(i)分在第三组"</span>)}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>

匹配区间:跟分支合并相似,只是把匹配条件换成区间

<code class="hljs go has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">let i =<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;"> 19</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">switch</span> i<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">%9</span> {    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;"> 1</span>..<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.3</span>:        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\(i)分在第一组"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;"> 4</span>..<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.6</span>:        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\(i)分在第二组"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">default</span>:        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\(i)分在第三组"</span>)}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>

除了意思的匹配类型外,switch还可以匹配字符串和单个字符,甚至可以匹配元组

<code class="hljs go has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">let some = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">(1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">,1</span>)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">switch</span> some {    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">(0</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">,0</span>):        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"位于原点"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> (_<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">,0</span>):        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"(\(some.0),0)位于X轴上"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">(0</span>,_):        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"(0,\(some.1))位于y轴上"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">(-2</span>..<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">,-2</span>..<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span>):        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"(\(some.0),\(some.1))位于矩形之内"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">default</span>:        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"(\(some.0),\(some.1))位于矩形之外"</span>)}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li></ul>

值绑定,将上例中的下划线代替为值绑定:

<code class="hljs go has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">let some = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">(1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">,1</span>)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">switch</span> some {    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">(0</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">,0</span>):        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"位于原点"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> (let x<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">,0</span>):        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"(\(x),0)位于X轴上"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">(0</span>,let y):        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"(0,\(y))位于y轴上"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">(-2</span>..<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">,-2</span>..<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span>):        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"(\(some.0),\(some.1))位于矩形之内"</span>)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">default</span>:        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">println</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"(\(some.0),\(some.1))位于矩形之外"</span>)}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li></ul>
  • where语句 
    用于case分支,使得case语句不仅仅能匹配常量,也能匹配变量,甚至是元组中的变量,同时也使得Swift更具备如同if else语句的功能:
<code class="hljs vbscript has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">let</span> (x,y) where <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">abs</span>(x)==<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">abs</span>(y):    println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"(\(x),\(y))位于对角线"</span>)</code>
0 0