This commit is contained in:
Lavare
2017-05-23 17:21:49 +08:00
committed by 安正超
parent c04b28ba60
commit b91f75b529

View File

@ -120,7 +120,7 @@ class VendingMachine {
`vend(itemNamed:)`方法的实现中使用了`guard`语句来提前退出方法,确保在购买某个物品所需的条件中,有任一条件不满足时,能提前退出方法并抛出相应的错误。由于`throw`语句会立即退出方法,所以物品只有在所有条件都满足时才会被售出。 `vend(itemNamed:)`方法的实现中使用了`guard`语句来提前退出方法,确保在购买某个物品所需的条件中,有任一条件不满足时,能提前退出方法并抛出相应的错误。由于`throw`语句会立即退出方法,所以物品只有在所有条件都满足时才会被售出。
因为`vend(itemNamed:)`方法会传递出它抛出的任何错误,在你的代码中调用此方法的地方,必须要么直接处理这些错误——使用`do-catch`语句,`try?``try!`;要么继续将这些错误传递下去。例如下面例子中,`buyFavoriteSnack(_:vendingMachine:)`同样是一个 throwing 函数,任何由`vend(itemNamed:)`方法抛出的错误会一直被传递到`buyFavoriteSnack(person:vendingMachine:) `函数被调用的地方。 因为`vend(itemNamed:)`方法会传递出它抛出的任何错误,在你的代码中调用此方法的地方,必须要么直接处理这些错误——使用`do-catch`语句,`try?``try!`;要么继续将这些错误传递下去。例如下面例子中,`buyFavoriteSnack(person:vendingMachine:)`同样是一个 throwing 函数,任何由`vend(itemNamed:)`方法抛出的错误会一直被传递到`buyFavoriteSnack(person:vendingMachine:) `函数被调用的地方。
```swift ```swift
let favoriteSnacks = [ let favoriteSnacks = [
@ -174,7 +174,7 @@ do {
var vendingMachine = VendingMachine() var vendingMachine = VendingMachine()
vendingMachine.coinsDeposited = 8 vendingMachine.coinsDeposited = 8
do { do {
try buyFavoriteSnack("Alice", vendingMachine: vendingMachine) try buyFavoriteSnack(person: "Alice", vendingMachine: vendingMachine)
} catch VendingMachineError.InvalidSelection { } catch VendingMachineError.InvalidSelection {
print("Invalid Selection.") print("Invalid Selection.")
} catch VendingMachineError.OutOfStock { } catch VendingMachineError.OutOfStock {