Swift:Errors thrown from here are not handled because the enclosing catch is not exhaustive

来源:互联网 发布:ios 电量优化 编辑:程序博客网 时间:2024/06/06 09:09

在学习 Swift 错误处理的时候,官方给出的 do-catch 例子如下:

......let favoriteSnacks = [    "Alice": "Chips",    "Bob": "Licorice",    "Eve": "Pretzels",]func buyFavoriteSnack(person: String, vendingMachine: VendingMachine) throws {    let snackName = favoriteSnacks[person] ?? "Candy Bar"    try vendingMachine.vend(itemNamed: snackName)}var vendingMachine = VendingMachine()vendingMachine.coinsDeposited = 8do {    try buyFavoriteSnack(person: "Alice", vendingMachine: vendingMachine)} catch VendingMachineError.invalidSelection {    print("Invalid Selection.")} catch VendingMachineError.outOfStock {    print("Out of Stock.")} catch VendingMachineError.insufficientFunds(let coinsNeeded) {    print("Insufficient funds. Please insert an additional \(coinsNeeded) coins.")}// Prints "Insufficient funds. Please insert an additional 2 coins."

但是亲自上手敲代码的时候,却总是在 “do” 闭包中 try 语句上报错:

“Errors thrown from here are not handled because the enclosing catch is not exhaustive”

这里写图片描述

大体意思是说这个 do-catch 是不完整的。这时候需要再加上一个空的 catch 语句用于关闭 catch。

do {    try buyFavoriteSnack(person: "Alice", vendingMachine: vendingMachine)} catch VendingMachineError.invalidSelection {    print("Invalid Selection.")} catch VendingMachineError.outOfStock {    print("Out of Stock.")} catch VendingMachineError.insufficientFunds(let coinsNeeded) {    print("Insufficient funds. Please insert an additional \(coinsNeeded) coins.")} catch { // 加入一个空的catch,用于关闭catch。否则会报错:Errors thrown from here are not handled because the enclosing catch is not exhaustive}
0 0
原创粉丝点击