swif-throws异常抛出

时间:2021-10-18 15:21:01
import UIKit

enum VendingMachineError: Error {
case invalidSelection //选择无效
case insufficientFunds(coinsNeeded: Int) //金额不足
case outOfStock //缺货 } struct Item {
var price: Int
var count: Int
} class VendingMachine {
var inventory = [
"Candy Bar": Item(price: , count: ),
"Chips": Item(price: , count: ),
"Pretzels": Item(price: , count: )
]
//货币沉淀
var coinsDeposited =
func dispenseSnack(snack: String) {
print("Dispensing \(snack)")
}
func vend(itemNamed name: String) throws {
guard let item = inventory[name] else {
throw VendingMachineError.invalidSelection
}
guard item.count > else {
throw VendingMachineError.outOfStock
}
guard item.price <= coinsDeposited else {
throw VendingMachineError.insufficientFunds(coinsNeeded: item.price - coinsDeposited)
}
coinsDeposited -= item.price
var newItem = item
newItem.count -=
inventory[name] = newItem
print("Dispensing \(name)")
}
} class First_Demo3: UIViewController { override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.title = "throws异常抛出"
self.view.backgroundColor = UIColor.white let vend = VendingMachine()
//货币沉淀
vend.coinsDeposited = /*
try抓取异常,如果执行成功,那么执行 vend.vend(itemNamed: "Pretzels")。cathch 完枚举的三个错误以后,要把catch关闭,即:
注意:最后加入一个空的catch,否则则会报错 Error throw from are not handled because the enclosing catch is not exhaustive 意思就是catch没有关闭。
*/ do {
try vend.vend(itemNamed: "Pretzels")
// 没有错误抛出
}catch VendingMachineError.invalidSelection{
print("选择无效")
// 有错误抛出
}catch VendingMachineError.outOfStock{
print("缺货")
}catch VendingMachineError.insufficientFunds(let coinsNeeded){
print("还差\(coinsNeeded)货币")
}catch { } } override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
} }