【游戏客户端开发】 IOS开发——Swift基础篇2
来源:互联网 发布:蜂窝移动网络收费吗 编辑:程序博客网 时间:2024/06/03 22:54
IOS开发——Swift基础篇2
- Playground的创建和使用
- 常量、变量和字符串
- 简单类型和类型推断
- 流程控制
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.0
或iata_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>
- 【游戏客户端开发】 IOS开发——Swift基础篇2
- 【游戏客户端开发】 IOS开发——Swift基础篇1
- IOS开发——Swift基础篇2
- 1、swift开发iOS——基础
- 【游戏客户端开发】 IOS开发——Swift和Objective-C交互时的一些注意点
- IOS开发——Swift基础篇1
- 【Swift】SpriteKit开发iOS游戏——场景切换
- iOS开发 ---- Swift基础语法。
- iOS开发----Swift基础控件
- Swift开发基础篇—基本语法
- iOS开发Swift篇—简单介绍
- iOS开发Swift篇—简单介绍
- ios开发——swift
- 2、swift开发iOS——swift语法
- iOS开发Swift篇—(八)函数(2)
- iOS开发——Swift快速上手(开发篇)
- iOS开发----Swift猜数字游戏.
- 游戏开发基础——要求篇
- android程序编写规范化
- iOS-异或加密
- 0115版本升级
- 0115界面编写规范化
- 0116android错误总结
- 【游戏客户端开发】 IOS开发——Swift基础篇2
- 文章标题
- android中handler的使用
- 编程实现三个线程ABC,并让它们顺次打印ABC
- 0116Runnable&&Thread的异同点&&Handler
- Hust oj 2059 搬果子(优先队列)
- LeetCode:Implement strStr()
- 菜鸟面试2
- 学习记录