1.Tuples(元组)
元组是多个值组合而成的复合值。元组中的值可以是任意类型,而且每一个元素的类型可以是不同的。
1>定义:使用()包含所有元素,用逗号分开,也可以对每个元素做命名
?
1 2 |
|
2>获取元素:
a.部分获取:是需要部分元素,其余忽略的元素使用下划线代替:
let (statusCode, _) = http404Error
println("The status code is \(statusCode)")
b.按下标获取,下标初始值从0开始
?
1 2 3 4 5 |
|
c.按名字获取,适用于重命名的情况
?
1 2 3 |
|
2.Optional(可选值)
1>.定义:当值可能不存在(may be absent)的时候使用Optionals. 文档中解释说:"There is
a value, and it equals x." or "There isn‘t a value at
all."
注:if语句可以判断Optionals有没有值
?
1 2 3 4 5 6 7 8 9 10 11 12 |
|
2>.optional binding(可选绑定)
使用可选绑定(optional
binding)来判断可选是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if
和while
语句中来对可选的值进行判断并把值赋给一个常量或者变量
?
1 2 3 4 5 6 |
|
3>.解析
a.强制解析(forced unwrapping):在optional对象后面跟惊叹号表示此对象必然有值,可以直接使用
?
1 2 3 4 5 6 |
|
b.隐式解析可选(implicitly unwrapped
optionals):有时候在程序架构中,第一次被赋值之后,可以确定一个可选总会有值。在这种情况下,每次都要判断和强制解析可选值是非常低效的,因为可以确定它总会有值。为了解决这一情况,把想要用作可选的类型的后面的问号(String?
)改成感叹号(String!
)来声明一个隐式解析可选
?
1 2 |
|
3.Assertions(断言)
可选可以让你判断值是否存在,你可以在代码中优雅地处理值缺失的情况。然而,在某些情况下,如果值缺失或者值并不满足特定的条件,你的代码可能并不需要继续执行。这时,你可以在你的代码中触发一个断言(assertion)来结束代码运行并通过调试来找到值缺失的原因。
使用断言进行调试
断言会在运行时判断一个逻辑条件是否为true
。从字面意思来说,断言“断言”一个条件是否为真。你可以使用断言来保证在运行其他代码之前,某些重要的条件已经被满足。如果条件判断为true
,代码运行会继续进行;如果条件判断为false
,代码运行停止,你的应用被终止。
如果你的代码在调试环境下触发了一个断言,比如你在 Xcode
中构建并运行一个应用,你可以清楚地看到不合法的状态发生在哪里并检查断言被触发时你的应用的状态。此外,断言允许你附加一条调试信息。
你可以使用全局assert
函数来写一个断言。向assert
函数传入一个结果为true
或者false
的表达式以及一条信息,当表达式为false
的时候这条信息会被显示:
?
1 2 3 |
|
在这个例子中,只有age >=
为
0true
的时候代码运行才会继续,也就是说,当age
的值非负的时候。如果age
的值是负数,就像代码中那样,age
为
>= 0false
,断言被触发,结束应用。
断言信息不能使用字符串插值。断言信息可以省略,就像这样:
assert(age >= 0)
何时使用断言
当条件可能为假时使用断言,但是最终一定要保证条件为真,这样你的代码才能继续运行。断言的适用情景:
- 整数的附属脚本索引被传入一个自定义附属脚本实现,但是下标索引值可能太小或者太大。
- 需要给函数传入一个值,但是非法的值可能导致函数不能正常执行。
- 一个可选值现在是
nil
,但是后面的代码运行需要一个非nil
值。