阐述 Swift throws 和 rethrows 的用法与作用?
参考答案:
在 Swift 中,throws
和 rethrows
是两个关键字,它们都与错误处理有关。下面是它们的用法和作用:
throws
throws
关键字用于标记一个函数、方法或初始化器可能会抛出一个错误。这意味着调用这些函数、方法或初始化器的代码必须准备好处理可能发生的错误。
用法
在函数、方法或初始化器的声明中,使用 throws
关键字来标记它可能会抛出错误。
func mightThrowError() throws -> String {
// ...
// 如果发生错误,可以使用 throw 关键字抛出一个错误
throw MyError.someError
}
作用
- 允许函数、方法或初始化器在发生错误时,通过
throw
关键字抛出一个错误。 - 调用这些函数、方法或初始化器的代码必须使用
try
、try?
或try!
来处理可能的错误。
示例
do {
let result = try mightThrowError()
// 使用 result 进行后续操作
} catch {
// 处理错误
print("An error occurred: \(error)")
}
rethrows
rethrows
关键字用于标记一个函数、方法或初始化器不会直接抛出错误,但会重新抛出从其参数或其他函数调用中接收到的错误。
用法
在函数、方法或初始化器的声明中,使用 rethrows
关键字来标记它可能会重新抛出错误。
func rethrowingFunction(_ closure: () throws -> Void) rethrows {
// ...
// 调用可能会抛出错误的闭包
try closure()
// ...
}
作用
- 允许函数、方法或初始化器在不直接处理错误的情况下,传递错误给调用者。
- 调用这些函数、方法或初始化器的代码仍然需要使用
try
、try?
或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
用于标记函数、方法或初始化器可能会重新抛出从其参数或其他函数调用中接收到的错误。