可选绑定 (optional binding)
使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。
像下面这样在if语句中写一个可选绑定:
<pre><code>if let constantName = someOptional {
statements
}</code></pre>
你可以像上面这样使用可选绑定来重写possibleNumber这个例子:
<pre><code>if let actualNumber = possibleNumber.toInt()
{
println("\(possibleNumber)has an integer value of\(actualNumber)")
}else
{
println("\(possibleNumber)could not be converted to an integer")
}
// 输出 "123 has an integer value of 123"</code></pre>
这段代码可以被理解为:
“如果possibleNumber.toInt返回的可选Int包含一个值,创建一个叫做actualNumber的新常量并将可选包含的值赋给它。”
如果转换成功,actualNumber常量可以在if语句的第一个分支中使用。它已经被可选类型包含的值初始化过,所以不需要再使用!后缀来获取它的值。在这个例子中,actualNumber只被用来输出转换结果。
你可以在可选绑定中使用常量和变量。如果你想在if语句的第一个分支中操作actualNumber的值,你可以改成if var actualNumber,这样可选类型包含的值就会被赋给一个变量而非常量。
断言 (assert)
可选类型可以让你判断值是否存在,你可以在代码中优雅地处理值缺失的情况。然而,在某些情况下,如果值缺失或者值并不满足特定的条件,你的代码可能没办法继续执行。这时,你可以在你的代码中触发一个断言(assertion)来结束代码运行并通过调试来找到值缺失的原因。
使用断言进行调试
断言会在运行时判断一个逻辑条件是否为true。从字面意思来说,断言“断言”一个条件是否为真。你可以使用断言来保证在运行其他代码之前,某些重要的条件已经被满足。如果条件判断为true,代码运行会继续进行;如果条件判断为false,代码运行停止,你的应用被终止。
如果你的代码在调试环境下触发了一个断言,比如你在 Xcode 中构建并运行一个应用,你可以清楚地看到不合法的状态发生在哪里并检查断言被触发时你的应用的状态。此外,断言允许你附加一条调试信息。
你可以使用全局assert函数来写一个断言。向assert函数传入一个结果为true或者false的表达式以及一条信息,当表达式为false的时候这条信息会被显示:
<pre><code>let age = -3
assert(age >= 0, "A person's age cannot be less than zero")
// 因为 age < 0,所以断言会触发</code></pre>
在这个例子中,只有age >= 0为true的时候,即age的值非负的时候,代码运行才会继续。如果age的值是负数,就像代码中那样,age >= 0为false,断言被触发,结束应用。
断言信息如果不需要,可以被省略,就像这样:
<pre><code>assert(age >= 0)</code></pre>
何时使用断言
当条件可能为假时使用断言,但是最终一定要保证条件为真,这样你的代码才能继续运行。断言的适用情景:
- 整数类型的下标索引被传入一个自定义下标脚本实现,但是下标索引值可能太小或者太大。
- 需要给函数传入一个值,但是非法的值可能导致函数不能正常执行。
- 一个可选值现在是nil,但是后面的代码运行需要一个非nil值。
注意:
断言可能导致你的应用终止运行,所以你应当仔细设计你的代码来让非法条件不会出现。然而,在你的应用发布之前,有时候非法条件可能出现,这时使用断言可以快速发现问题。