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

Posted 陌上心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift:Errors thrown from here are not handled because the enclosing catch is not exhaustive相关的知识,希望对你有一定的参考价值。

在学习 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 = 8
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.")

// 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


以上是关于Swift:Errors thrown from here are not handled because the enclosing catch is not exhaustive的主要内容,如果未能解决你的问题,请参考以下文章

tomcat启动时,内存溢出,Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thr

MyEclipse Servers视窗出现“Could not create the view: An unexpected exception was thrown”错误解决办法

ERROR 1129 (HY000): Too many connection errors from

如何为以下异常处理代码编写junit测试用例?

ORA-20011 ORA-29913 and ORA-29400 with Associated KUP-XXXXX Errors from DBMS_STATS.GATHER_STATS_JOB(

SparkSpark cache 报错 Exception thrown in awaitResult