From c0d13977f85b5b998c0da63ee48c7bf0dfd47c34 Mon Sep 17 00:00:00 2001 From: futantan Date: Thu, 8 Oct 2015 13:05:48 +0800 Subject: [PATCH 1/2] Added a note to the Debugging with Assertions section about when user-defined assertions are disabled. --- source/chapter2/01_The_Basics.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/chapter2/01_The_Basics.md b/source/chapter2/01_The_Basics.md index 5dd92c6d..ff172349 100755 --- a/source/chapter2/01_The_Basics.md +++ b/source/chapter2/01_The_Basics.md @@ -609,7 +609,7 @@ if convertedNumber != nil { ### 可选绑定 -使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在`if`和`while`语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。`if`和`while`语句,请参考[控制流](./05_Control_Flow.html)。 +使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在`if`和`while`语句中,这条语句不仅可以用来判断可选类型中是否有值,同时可以将可选类型中的值赋给一个常量或者变量。`if`和`while`语句,请参考[控制流](./05_Control_Flow.html)。 像下面这样在`if`语句中写一个可选绑定: @@ -771,6 +771,9 @@ assert(age >= 0, "A person's age cannot be less than zero") assert(age >= 0) ``` +> 注意: +当代码使用优化编译的时候,断言将会被禁用,例如在 Xcode 中,使用默认的 target Release 配置选项来 build 时,断言会被禁用。 + ### 何时使用断言 当条件可能为假时使用断言,但是最终一定要_保证_条件为真,这样你的代码才能继续运行。断言的适用情景: From b72d33565e861d06ae3cfb871115a416de82c939 Mon Sep 17 00:00:00 2001 From: futantan Date: Thu, 8 Oct 2015 13:18:08 +0800 Subject: [PATCH 2/2] update chapter content guide --- source/chapter2/05_Control_Flow.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/chapter2/05_Control_Flow.md b/source/chapter2/05_Control_Flow.md index 0788e176..04768e79 100755 --- a/source/chapter2/05_Control_Flow.md +++ b/source/chapter2/05_Control_Flow.md @@ -14,6 +14,8 @@ - [While 循环](#while_loops) - [条件语句](#conditional_statement) - [控制转移语句(Control Transfer Statements)](#control_transfer_statements) +- [提前退出](#early_exit) +- [检测API是否可用](#checking_api_availability) Swift提供了类似 C 语言的流程控制结构,包括可以多次执行任务的`for`和`while`循环,基于特定条件选择执行不同代码分支的`if`、`guard`和`switch`语句,还有控制流程跳转到其他代码的`break`和`continue`语句。 @@ -713,7 +715,7 @@ print("Game over!") 同时请注意,当调用`continue gameLoop`去跳转到下一次循环迭代时,这里使用`gameLoop`标签并不是严格必须的。因为在这个游戏中,只有一个循环体,所以`continue`语句会影响到哪个循环体是没有歧义的。然而,`continue`语句使用`gameLoop`标签也是没有危害的。这样做符合标签的使用规则,同时参照旁边的`break gameLoop`,能够使游戏的逻辑更加清晰和易于理解。 -### 提前退出 +## 提前退出 像`if`语句一样,`guard`的执行取决于一个表达式的布尔值。我们可以使用`guard`语句来要求条件必须为真时,以执行`guard`语句后的代码。不同于`if`语句,一个`guard`语句总是有一个`else`分句,如果条件不为真则执行`else`分局中的代码。 @@ -746,7 +748,7 @@ greet(["name": "Jane", "location": "Cupertino"]) 它可以使你的代码连贯的被执行而不需要将它包在`else`块中,它可以使你处理违反要求的代码接近要求。 -### 检测API是否可用 +## 检测API是否可用 Swift 有内置支持去检查接口的可用性的,这可以确保我们不会不小心地使用对于当前部署目标不可用的API。