Swift语句全解析:从基础到高级应用
立即解锁
发布时间: 2025-08-16 02:36:08 阅读量: 24 订阅数: 29 AIGC 


Swift编程入门与实践指南
### Swift 语句全解析:从基础到高级应用
#### 1. Swift 语句概述
在 Swift 中,语句主要分为三种类型:简单语句、编译器控制语句和控制流语句。简单语句最为常见,由表达式或声明组成;编译器控制语句能改变编译器的行为,包含条件编译块和行控制语句;控制流语句则用于控制程序的执行流程,涵盖循环语句、分支语句和控制转移语句。此外,Swift 还提供了 `do` 语句来引入作用域、捕获和处理错误,以及 `defer` 语句在当前作用域退出前执行清理操作。语句后可选择性地添加分号(;),用于在同一行分隔多个语句。
语句的语法规则如下:
```plaintext
statement →
expression ;opt
statement →
declaration ;opt
statement →
loop-statement ;opt
statement →
branch-statement ;opt
statement →
labeled-statement ;opt
statement →
control-transfer-statement ;opt
statement →
defer-statement ;opt
statement →
do-statement ;opt
statement →
compiler-control-statement
statements →
statement statements opt
```
#### 2. 循环语句
循环语句可根据循环中指定的条件重复执行代码块。Swift 有三种循环语句:`for-in` 语句、`while` 语句和 `repeat-while` 语句。循环语句的控制流可通过 `break` 语句和 `continue` 语句改变。
循环语句的语法规则如下:
```plaintext
loop-statement →
for-in-statement
loop-statement →
while-statement
loop-statement →
repeat-while-statement
```
##### 2.1 `for-in` 语句
`for-in` 语句用于对符合 `Sequence` 协议的集合(或任何类型)中的每个元素执行一次代码块。其形式如下:
```swift
for item in collection {
statements
}
```
执行过程为:调用集合表达式的 `makeIterator()` 方法获取迭代器类型的值,然后调用迭代器的 `next()` 方法开始循环。若返回值不为 `nil`,将其赋值给 `item` 模式,执行语句后继续循环;否则,结束循环。
`for-in` 语句的语法规则如下:
```plaintext
for-in-statement →
for caseopt pattern in expression where-clause opt code-block
```
##### 2.2 `while` 语句
`while` 语句只要条件为真,就会重复执行代码块。其形式如下:
```swift
while condition {
statements
}
```
执行步骤为:
1. 计算条件的值。若为真,执行步骤 2;若为假,结束循环。
2. 执行语句,然后返回步骤 1。
由于条件值在语句执行前计算,所以 `while` 语句中的语句可以执行零次或多次。条件的值必须为 `Bool` 类型或可桥接到 `Bool` 类型,也可以是可选绑定声明。
`while` 语句的语法规则如下:
```plaintext
while-statement →
while condition-list code-block
condition-list →
condition | condition , condition-list
condition →
expression | availability-condition | case-condition | optional-binding-condition
case-condition →
case pattern initializer
optional-binding-condition →
let pattern initializer opt | var pattern initializer opt
```
##### 2.3 `repeat-while` 语句
`repeat-while` 语句会先执行一次代码块,然后只要条件为真,就会继续执行。其形式如下:
```swift
repeat {
statements
} while condition
```
执行步骤为:
1. 执行语句,然后执行步骤 2。
2. 计算条件的值。若为真,返回步骤 1;若为假,结束循环。
由于条件值在语句执行后计算,所以 `repeat-while` 语句中的语句至少会执行一次。条件的值必须为 `Bool` 类型或可桥接到 `Bool` 类型,也可以是可选绑定声明。
`repeat-while` 语句的语法规则如下:
```plaintext
repeat-while-statement →
repeat code-block while expression
```
以下是循环语句执行流程的 mermaid 流程图:
```mermaid
graph TD;
A[开始] --> B{选择循环类型};
B --> C{for-in循环};
B --> D{while循环};
B --> E{repeat-while循环};
C --> F[获取迭代器];
F --> G{迭代器有值?};
G -- 是 --> H[执行语句];
H --> F;
G -- 否 --> I[结束循环];
D --> J{条件为真?};
J -- 是 --> K[执行语句];
K --> J;
J -- 否 --> I;
E --> L[执行语句];
L --> M{条件为真?};
M -- 是 --> L;
M -- 否 --> I;
```
#### 3. 分支语句
分支语句可根据一个或多个条件的值执行特定的代码部分。Swift 有三种分支语句:`if` 语句、`guard` 语句和 `switch` 语句。`if` 语句或 `switch` 语句的控制流可通过 `break` 语句改变。
分支语句的语法规则如下:
```plaintext
branch-statement →
if-statement
branch-statement →
guard-statement
branch-statement →
switch-statement
```
##### 3.1 `if` 语句
`if` 语句用于根据一个或多个条件的计算结果执行代码。有两种基本形式:
- 第一种形式:只有当条件为真时才执行代码。
```swift
if condition {
statements
}
```
- 第二种形式:提供一个额外的 `else` 子句,用于在条件为真时执行一部分代码,在条件为假时执行另一部分代码。
```swift
if condition {
statements to execute if condition is true
} else {
statements to execute if condition is false
}
```
`else` 子句中可以包含另一个 `if` 语句,以测试多个条件。
`if` 语句的语法规则如下:
```plaintext
if-statement →
if condition-list code-block else-clause opt
else-clause →
else code-block | else if-statement
```
##### 3.2 `guard` 语句
`guard` 语句用于在一个或多个条件不满足时将程序控制转移出作用域。其形式如下:
```swift
guard condition else {
statements
}
```
条件的值必须为 `Bool` 类型或可桥接到 `Bool` 类型,也可以是可选绑定声明。`else` 子句是必需的,必须调用返回类型为 `Never` 的函数,或者使用 `return`、`break`、`continue`、`throw` 语句将程序控制转移出 `guard` 语句的作用域。
`guard` 语句的语法规则如下:
```plaintext
guard-statement →
guard condition-list else code-block
```
##### 3.3 `switch` 语句
`switch` 语句根据控制表达式的值执行特定的代码块。其形式如下:
```swift
switch control expression {
case pattern 1:
statements
case pattern 2 where condition:
statements
case pattern 3 where condition,
pattern 4 where condition:
statements
default:
statements
}
```
执行过程为:计算控制表达式的值,然后与每个 `case` 中指定的模式进行比较。若匹配成功,执行该 `case` 作用域内的语句。每个 `case` 的作用域不能为空,若不想执行匹配 `case` 中的代码,可使用单个 `break` 语句。
`switch` 语句的语法规则如下:
```plaintext
switch-statement →
switch expression { switch-cases opt }
switch-cases →
switch-case switch-cases opt
switch-case →
case-label stat
```
0
0
复制全文
相关推荐










