跳到主要内容

阐述 Swift throws 和 rethrows 的用法与作用?

参考答案:

在 Swift 中,throwsrethrows 是两个关键字,它们都与错误处理有关。下面是它们的用法和作用:

throws

throws 关键字用于标记一个函数、方法或初始化器可能会抛出一个错误。这意味着调用这些函数、方法或初始化器的代码必须准备好处理可能发生的错误。

用法

在函数、方法或初始化器的声明中,使用 throws 关键字来标记它可能会抛出错误。

func mightThrowError() throws -> String {
    // ...
    // 如果发生错误,可以使用 throw 关键字抛出一个错误
    throw MyError.someError
}

作用

  • 允许函数、方法或初始化器在发生错误时,通过 throw 关键字抛出一个错误。
  • 调用这些函数、方法或初始化器的代码必须使用 trytry?try! 来处理可能的错误。

示例

do {
    let result = try mightThrowError()
    // 使用 result 进行后续操作
} catch {
    // 处理错误
    print("An error occurred: \(error)")
}

rethrows

rethrows 关键字用于标记一个函数、方法或初始化器不会直接抛出错误,但会重新抛出从其参数或其他函数调用中接收到的错误。

用法

在函数、方法或初始化器的声明中,使用 rethrows 关键字来标记它可能会重新抛出错误。

func rethrowingFunction(_ closure: () throws -> Void) rethrows {
    // ...
    // 调用可能会抛出错误的闭包
    try closure()
    // ...
}

作用

  • 允许函数、方法或初始化器在不直接处理错误的情况下,传递错误给调用者。
  • 调用这些函数、方法或初始化器的代码仍然需要使用 trytry?try! 来处理可能的错误。

示例

func mightThrowError() throws -> Void {
    // ...
    // 如果发生错误,使用 throw 抛出
    throw MyError.someError
}

func caller() {
    do {
        try rethrowingFunction(mightThrowError)
    } catch {
        // 处理错误
        print("An error occurred: \(error)")
    }
}

在上面的示例中,rethrowingFunction 不会直接抛出错误,但它会调用可能会抛出错误的 mightThrowError 函数,并重新抛出任何从 mightThrowError 中接收到的错误。调用 rethrowingFunction 的代码需要使用 do-catch 语句来处理可能的错误。

总结:throws 用于标记函数、方法或初始化器可能会直接抛出错误,而 rethrows 用于标记函数、方法或初始化器可能会重新抛出从其参数或其他函数调用中接收到的错误。