校正:
1.A Swift Tour中的"错误处理"一节的代码 do 与 { 中间缺少了空格
2.Basic Operators一节中 "开头"的"或让 i 值加 1 的便捷自增运算符 ++i 等"在原文中已经删除
3.Basic Operators一节中 "术语"的"后置运算符需紧跟在操作对象之后(如 i++)"改为了(如 c!)
4.Basic Operators一节中 "自增和自减运算"的内容已被删除
5.Strings and Characters一节中"前缀/后缀相等"的"++"号已经被替换为"+=1"
6.Collection Types一节中的"通过两个数组相加创建一个数组"的代码与原文不符,且当前代码在运行时会报错
This commit is contained in:
@ -713,7 +713,7 @@ func sendToPrinter(printerName: String) throws -> String {
|
||||
有多种方式可以用来进行错误处理。一种方式是使用`do-catch`。在`do`代码块中,使用`try`来标记可以抛出错误的代码。在`catch`代码块中,除非你另外命名,否则错误会自动命名为`error`。
|
||||
|
||||
```swift
|
||||
do{
|
||||
do {
|
||||
let printerResponse = try sendToPrinter("Bi Sheng")
|
||||
print(printerResponse)
|
||||
} catch {
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
- [区间运算符](#range_operators)
|
||||
- [逻辑运算符](#logical_operators)
|
||||
|
||||
运算符是检查、改变、合并值的特殊符号或短语。例如,加号(`+`)将两个数相加(如 `let i = 1 + 2`)。更复杂的运算例子包括逻辑与运算符 `&&`(如 `if enteredDoorCode && passedRetinaScan`),或让 i 值加 1 的便捷自增运算符 `++i` 等。
|
||||
运算符是检查、改变、合并值的特殊符号或短语。例如,加号(`+`)将两个数相加(如 `let i = 1 + 2`)。更复杂的运算例子包括逻辑与运算符 `&&`(如 `if enteredDoorCode && passedRetinaScan`)。
|
||||
|
||||
Swift 支持大部分标准 C 语言的运算符,且改进许多特性来减少常规编码错误。如:赋值符(`=`)不返回值,以防止把想要判断相等运算符(`==`)的地方写成赋值符导致的错误。算术运算符(`+`,`-`,`*`,`/`,`%`等)会检测并不允许值溢出,以此来避免保存变量时由于变量大于或小于其类型所能承载的范围时导致的异常结果。当然允许你使用 Swift 的溢出运算符来实现溢出。详情参见[溢出运算符](../chapter2/25_Advanced_Operators.html#overflow_operators)。
|
||||
|
||||
@ -39,7 +39,7 @@ Swift 支持大部分标准 C 语言的运算符,且改进许多特性来减
|
||||
|
||||
运算符分为一元、二元和三元运算符。
|
||||
|
||||
- 一元运算符对单一操作对象操作(如 `-a`)。一元运算符分前置运算符和后置运算符,前置运算符需紧跟在操作对象之前(如 `!b`),后置运算符需紧跟在操作对象之后(如 `i++`)。
|
||||
- 一元运算符对单一操作对象操作(如 `-a`)。一元运算符分前置运算符和后置运算符,前置运算符需紧跟在操作对象之前(如 `!b`),后置运算符需紧跟在操作对象之后(如 `c!`)。
|
||||
- 二元运算符操作两个操作对象(如 `2 + 3`),是中置的,因为它们出现在两个操作对象之间。
|
||||
- 三元运算符操作三个操作对象,和 C 语言一样,Swift 只有一个三元运算符,就是三目运算符(`a ? b : c`)。
|
||||
|
||||
@ -154,38 +154,6 @@ Swift 中所有数值类型都支持了基本的四则算术运算:
|
||||
|
||||

|
||||
|
||||
### 自增和自减运算
|
||||
|
||||
和 C 语言一样,Swift 也提供了对变量本身加 1 或减 1 的自增(`++`)和自减(`--`)的缩略算符。其操作对象可以是整形和浮点型。
|
||||
|
||||
```swift
|
||||
var i = 0
|
||||
++i // 现在 i = 1
|
||||
```
|
||||
|
||||
每调用一次 `++i`,`i` 的值就会加 1。实际上,`++i` 是 `i = i + 1` 的简写,而 `--i` 是 `i = i - 1` 的简写。
|
||||
|
||||
`++` 和 `--` 既可以用作前置运算又可以用作后置运算。`++i`、`i++` 都是有效的自增的写法;相类似对应自减的写法则是 `--i` 和 `i--`。
|
||||
|
||||
我们需要注意的是这些运算符即可修改了 `i` 的值也可以返回 `i` 的值。如果你只想修改 `i` 的值,那你就可以忽略这个返回值。但如果你想使用返回值,你就需要留意前置和后置操作的返回值是不同的,它们遵循以下原则:
|
||||
|
||||
- 当 `++` 前置的时候,先自増再返回。
|
||||
- 当 `++` 后置的时候,先返回再自增。
|
||||
|
||||
例如:
|
||||
|
||||
```swift
|
||||
var a = 0
|
||||
let b = ++a // a 和 b 现在都是 1
|
||||
let c = a++ // a 现在 2, 但 c 是 a 自增前的值 1
|
||||
```
|
||||
|
||||
上述例子,`let b = ++a` 先把 `a` 加 1 了再返回 `a` 的值。所以 `a` 和 `b` 都是新值 `1`。
|
||||
|
||||
而 `let c = a++`,是先返回了 `a` 的值,然后 `a` 才加 1。所以 `c` 得到了 `a` 的旧值 1,而 `a` 加 1 后变成 2。
|
||||
|
||||
除非你需要使用 `i++` 的特性,不然推荐你使用 `++i` 和 `--i`,因为先修改后返回这样的行为更符合我们的逻辑。
|
||||
|
||||
|
||||
### 一元负号运算符
|
||||
|
||||
|
||||
@ -472,7 +472,7 @@ let romeoAndJuliet = [
|
||||
var act1SceneCount = 0
|
||||
for scene in romeoAndJuliet {
|
||||
if scene.hasPrefix("Act 1 ") {
|
||||
++act1SceneCount
|
||||
act1SceneCount += 1
|
||||
}
|
||||
}
|
||||
print("There are \(act1SceneCount) scenes in Act 1")
|
||||
@ -486,9 +486,9 @@ var mansionCount = 0
|
||||
var cellCount = 0
|
||||
for scene in romeoAndJuliet {
|
||||
if scene.hasSuffix("Capulet's mansion") {
|
||||
++mansionCount
|
||||
mansionCount += 1
|
||||
} else if scene.hasSuffix("Friar Lawrence's cell") {
|
||||
++cellCount
|
||||
cellCount += 1
|
||||
}
|
||||
}
|
||||
print("\(mansionCount) mansion scenes; \(cellCount) cell scenes")
|
||||
|
||||
@ -87,7 +87,7 @@ var threeDoubles = [Double](count: 3, repeatedValue:0.0)
|
||||
我们可以使用加法操作符(`+`)来组合两种已存在的相同类型数组。新数组的数据类型会被从两个数组的数据类型中推断出来:
|
||||
|
||||
```swift
|
||||
var anotherThreeDoubles = Array(count: 3, repeatedValue: 2.5)
|
||||
var anotherThreeDoubles = [Double](count: 3, repeatedValue: 2.5)
|
||||
// anotherThreeDoubles 被推断为 [Double],等价于 [2.5, 2.5, 2.5]
|
||||
|
||||
var sixDoubles = threeDoubles + anotherThreeDoubles
|
||||
|
||||
Reference in New Issue
Block a user