在《swift编程语言》一书的开头,就有以下例子

func makeASandwich() throws {
    // ...
}

do {
    try makeASandwich()
    eatASandwich()
} catch SandwichError.outOfCleanDishes {
    washDishes()
} catch SandwichError.missingIngredients(let ingredients) {
    buyGroceries(ingredients)
}

我想知道的是这条线
catch SandwichError.missingIngredients(let ingredients)

特别是语法 (let ingredients)
对我来说,看起来他们在函数调用中使用了 let 这个词,但也许我错了。无论如何,我想知道 let 这个词的目的是什么。

最佳答案

它是一个“值绑定(bind)模式”(在“枚举案例模式”中)。
SandwichError 是一个具有“关联值”的枚举,类似于

enum SandwichError: Error {
     case outOfCleanDishes
     case missingIngredients([String])
}

每个 catch 关键字后跟一个模式,如果抛出 SandwichError.missingIngredients 错误
throw SandwichError.missingIngredients(["Salt", "Pepper"])

然后
catch SandwichError.missingIngredients(let ingredients)

匹配并且局部变量 ingredients 绑定(bind)到 catch 块的关联值 ["Salt", "Pepper"]

它的工作原理与 Matching Enumeration Values with a Switch Statement 基本相同:

关于swift - catch 表达式中 let 一词的用途是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55509755/

10-15 07:51