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