@@ -10,11 +10,11 @@ Swift 包含了 C 和 Objective-C 上所有基础数据类型,`Int` 表示整
10
10
11
11
Swift 还增加了可选(Optional)类型,用于处理值缺失的情况。可选表示 “那儿有一个值,并且它等于 * x* ” 或者 “那儿没有值” 。可选有点像在 Objective-C 中使用 ` nil ` ,但是它可以用在任何类型上,不仅仅是类。可选类型比 Objective-C 中的 ` nil ` 指针更加安全也更具表现力,它是 Swift 许多强大特性的重要组成部分。
12
12
13
- Swift 是一门* 类型安全* 的语言,这意味着 Swift 可以让你清楚地知道值的类型。如果你的代码需要一个 ` String ` ,类型安全会阻止你不小心传入一个 ` Int ` 。同样的,如果你的代码需要一个 ` String ` ,类型安全会阻止你意外传入一个可选的 ` String ` 。类型安全可以帮助你在开发阶段尽早发现并修正错误。
13
+ Swift 是一门 * 类型安全* 的语言,这意味着 Swift 可以让你清楚地知道值的类型。如果你的代码需要一个 ` String ` ,类型安全会阻止你不小心传入一个 ` Int ` 。同样的,如果你的代码需要一个 ` String ` ,类型安全会阻止你意外传入一个可选的 ` String ` 。类型安全可以帮助你在开发阶段尽早发现并修正错误。
14
14
15
15
## 常量和变量 {#constants-and-variables}
16
16
17
- 常量和变量把一个名字(比如 ` maximumNumberOfLoginAttempts ` 或者 ` welcomeMessage ` )和一个指定类型的值(比如数字 ` 10 ` 或者字符串 ` "Hello" ` )关联起来。* 常量* 的值一旦设定就不能改变,而* 变量* 的值可以随意更改。
17
+ 常量和变量把一个名字(比如 ` maximumNumberOfLoginAttempts ` 或者 ` welcomeMessage ` )和一个指定类型的值(比如数字 ` 10 ` 或者字符串 ` "Hello" ` )关联起来。 * 常量* 的值一旦设定就不能改变,而 * 变量* 的值可以随意更改。
18
18
19
19
### 声明常量和变量 {#declaring}
20
20
@@ -43,15 +43,15 @@ var x = 0.0, y = 0.0, z = 0.0
43
43
44
44
### 类型注解 {#type-annotations}
45
45
46
- 当你声明常量或者变量的时候可以加上* 类型注解(type annotation)* ,说明常量或者变量中要存储的值的类型。如果要添加类型注解,需要在常量或者变量名后面加上一个冒号和空格,然后加上类型名称。
46
+ 当你声明常量或者变量的时候可以加上 * 类型注解(type annotation)* ,说明常量或者变量中要存储的值的类型。如果要添加类型注解,需要在常量或者变量名后面加上一个冒号和空格,然后加上类型名称。
47
47
48
48
这个例子给 ` welcomeMessage ` 变量添加了类型注解,表示这个变量可以存储 ` String ` 类型的值:
49
49
50
50
``` swift
51
51
var welcomeMessage: String
52
52
```
53
53
54
- 声明中的冒号代表着* “是...类型”* ,所以这行代码可以被理解为:
54
+ 声明中的冒号代表着 * “是...类型”* ,所以这行代码可以被理解为:
55
55
56
56
“声明一个类型为 ` String ` ,名字为 ` welcomeMessage ` 的变量。”
57
57
@@ -118,7 +118,7 @@ print(friendlyWelcome)
118
118
119
119
` print(_:separator:terminator:) ` 是一个用来输出一个或多个值到适当输出区的全局函数。如果你用 Xcode,` print(_:separator:terminator:) ` 将会输出内容到“console”面板上。` separator ` 和 ` terminator ` 参数具有默认值,因此你调用这个函数的时候可以忽略它们。默认情况下,该函数通过添加换行符来结束当前行。如果不想换行,可以传递一个空字符串给 ` terminator ` 参数--例如,` print(someValue, terminator:"") ` 。关于参数默认值的更多信息,请参考 [ 默认参数值] ( ./06_Functions.md#default-parameter-values ) 。
120
120
121
- Swift 用* 字符串插值(string interpolation)* 的方式把常量名或者变量名当做占位符加入到长字符串中,Swift 会用当前常量或变量的值替换这些占位符。将常量或变量名放入圆括号中,并在开括号前使用反斜杠将其转义:
121
+ Swift 用 * 字符串插值(string interpolation)* 的方式把常量名或者变量名当做占位符加入到长字符串中,Swift 会用当前常量或变量的值替换这些占位符。将常量或变量名放入圆括号中,并在开括号前使用反斜杠将其转义:
122
122
123
123
``` swift
124
124
print (" The current value of friendlyWelcome is \( friendlyWelcome ) " )
@@ -217,11 +217,11 @@ Swift 也提供了一个特殊的无符号类型 `UInt`,长度与当前平台
217
217
218
218
## 类型安全和类型推断 {#type-safety-and-type-inference}
219
219
220
- Swift 是一个* 类型安全(type safe)* 的语言。类型安全的语言可以让你清楚地知道代码要处理的值的类型。如果你的代码需要一个 ` String ` ,你绝对不可能不小心传进去一个 ` Int ` 。
220
+ Swift 是一个 * 类型安全(type safe)* 的语言。类型安全的语言可以让你清楚地知道代码要处理的值的类型。如果你的代码需要一个 ` String ` ,你绝对不可能不小心传进去一个 ` Int ` 。
221
221
222
- 由于 Swift 是类型安全的,所以它会在编译你的代码时进行* 类型检查(type checks)* ,并把不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误。
222
+ 由于 Swift 是类型安全的,所以它会在编译你的代码时进行 * 类型检查(type checks)* ,并把不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误。
223
223
224
- 当你要处理不同类型的值时,类型检查可以帮你避免错误。然而,这并不是说你每次声明常量和变量的时候都需要显式指定类型。如果你没有显式指定类型,Swift 会使用* 类型推断(type inference)* 来选择合适的类型。有了类型推断,编译器可以在编译代码的时候自动推断出表达式的类型。原理很简单,只要检查你赋的值即可。
224
+ 当你要处理不同类型的值时,类型检查可以帮你避免错误。然而,这并不是说你每次声明常量和变量的时候都需要显式指定类型。如果你没有显式指定类型,Swift 会使用 * 类型推断(type inference)* 来选择合适的类型。有了类型推断,编译器可以在编译代码的时候自动推断出表达式的类型。原理很简单,只要检查你赋的值即可。
225
225
226
226
因为有类型推断,和 C 或者 Objective-C 比起来 Swift 很少需要声明类型。常量和变量虽然需要明确类型,但是大部分工作并不需要你自己来完成。
227
227
@@ -256,10 +256,10 @@ let anotherPi = 3 + 0.14159
256
256
257
257
整数字面量可以被写作:
258
258
259
- * 一个* 十进制* 数,没有前缀
260
- * 一个* 二进制* 数,前缀是 ` 0b `
261
- * 一个* 八进制* 数,前缀是 ` 0o `
262
- * 一个* 十六进制* 数,前缀是 ` 0x `
259
+ * 一个 * 十进制* 数,没有前缀
260
+ * 一个 * 二进制* 数,前缀是 ` 0b `
261
+ * 一个 * 八进制* 数,前缀是 ` 0o `
262
+ * 一个 * 十六进制* 数,前缀是 ` 0x `
263
263
264
264
下面的所有整数字面量的十进制值都是 ` 17 ` :
265
265
@@ -357,7 +357,7 @@ let integerPi = Int(pi)
357
357
358
358
## 类型别名 {#type-aliases}
359
359
360
- * 类型别名(type aliases)* 就是给现有类型定义另一个名字。你可以使用 ` typealias ` 关键字来定义类型别名。
360
+ * 类型别名(type aliases)* 就是给现有类型定义另一个名字。你可以使用 ` typealias ` 关键字来定义类型别名。
361
361
362
362
当你想要给现有类型起一个更有意义的名字时,类型别名非常有用。假设你正在处理特定长度的外部资源的数据:
363
363
@@ -376,7 +376,7 @@ var maxAmplitudeFound = AudioSample.min
376
376
377
377
## 布尔值 {#booleans}
378
378
379
- Swift 有一个基本的* 布尔(Boolean)类型* ,叫做 ` Bool ` 。布尔值指* 逻辑* 上的值,因为它们只能是真或者假。Swift 有两个布尔常量,` true ` 和 ` false ` :
379
+ Swift 有一个基本的 * 布尔(Boolean)类型* ,叫做 ` Bool ` 。布尔值指 * 逻辑* 上的值,因为它们只能是真或者假。Swift 有两个布尔常量,` true ` 和 ` false ` :
380
380
381
381
``` swift
382
382
let orangesAreOrange = true
@@ -422,9 +422,9 @@ if i == 1 {
422
422
423
423
## 元组 {#tuples}
424
424
425
- * 元组(tuples)* 把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。
425
+ * 元组(tuples)* 把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。
426
426
427
- 下面这个例子中,` (404, "Not Found") ` 是一个描述 * HTTP 状态码(HTTP status code)* 的元组。HTTP 状态码是当你请求网页的时候 web 服务器返回的一个特殊值。如果你请求的网页不存在就会返回一个 ` 404 Not Found ` 状态码。
427
+ 下面这个例子中,` (404, "Not Found") ` 是一个描述 * HTTP 状态码(HTTP status code)* 的元组。HTTP 状态码是当你请求网页的时候 web 服务器返回的一个特殊值。如果你请求的网页不存在就会返回一个 ` 404 Not Found ` 状态码。
428
428
429
429
``` swift
430
430
let http404Error = (404 , " Not Found" )
@@ -485,7 +485,7 @@ print("The status message is \(http200Status.description)")
485
485
486
486
## 可选类型 {#optionals}
487
487
488
- 使用* 可选类型(optionals)* 来处理值可能缺失的情况。可选类型表示两种可能:
488
+ 使用 * 可选类型(optionals)* 来处理值可能缺失的情况。可选类型表示两种可能:
489
489
或者有值, 你可以解析可选类型访问这个值, 或者根本没有值。
490
490
491
491
> 注意
@@ -502,7 +502,7 @@ let convertedNumber = Int(possibleNumber)
502
502
// convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"
503
503
```
504
504
505
- 因为该构造器可能会失败,所以它返回一个* 可选类型* (optional)` Int ` ,而不是一个 ` Int ` 。一个可选的 ` Int ` 被写作 ` Int? ` 而不是 ` Int ` 。问号暗示包含的值是可选类型,也就是说可能包含 ` Int ` 值也可能* 不包含值* 。(不能包含其他任何值比如 ` Bool ` 值或者 ` String ` 值。只能是 ` Int ` 或者什么都没有。)
505
+ 因为该构造器可能会失败,所以它返回一个 * 可选类型* (optional)` Int ` ,而不是一个 ` Int ` 。一个可选的 ` Int ` 被写作 ` Int? ` 而不是 ` Int ` 。问号暗示包含的值是可选类型,也就是说可能包含 ` Int ` 值也可能 * 不包含值* 。(不能包含其他任何值比如 ` Bool ` 值或者 ` String ` 值。只能是 ` Int ` 或者什么都没有。)
506
506
507
507
### nil {#nil}
508
508
@@ -543,7 +543,7 @@ if convertedNumber != nil {
543
543
// 输出“convertedNumber contains some integer value.”
544
544
```
545
545
546
- 当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(` ! ` )来获取值。这个惊叹号表示“我知道这个可选有值,请使用它。”这被称为可选值的* 强制解析(forced unwrapping)* :
546
+ 当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(` ! ` )来获取值。这个惊叹号表示“我知道这个可选有值,请使用它。”这被称为可选值的 * 强制解析(forced unwrapping)* :
547
547
548
548
``` swift
549
549
if convertedNumber != nil {
@@ -560,7 +560,7 @@ if convertedNumber != nil {
560
560
561
561
### 可选绑定 {#optional-binding}
562
562
563
- 使用* 可选绑定(optional binding)* 来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在 ` if ` 和 ` while ` 语句中,这条语句不仅可以用来判断可选类型中是否有值,同时可以将可选类型中的值赋给一个常量或者变量。` if ` 和 ` while ` 语句,请参考 [ 控制流] ( ./05_Control_Flow.md ) 。
563
+ 使用 * 可选绑定(optional binding)* 来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在 ` if ` 和 ` while ` 语句中,这条语句不仅可以用来判断可选类型中是否有值,同时可以将可选类型中的值赋给一个常量或者变量。` if ` 和 ` while ` 语句,请参考 [ 控制流] ( ./05_Control_Flow.md ) 。
564
564
565
565
像下面这样在 ` if ` 语句中写一个可选绑定:
566
566
0 commit comments