如何从闭包中强制捕获?
How to force a catch from a closure?
假设在Objective-C中有以下情况:一个块数组。
所以我想运行一个街区,我这样做:
myBlock block = blocks[0]();
现在想象一下 运行s 在 try
:
中
myBlock block = blocks[0];
@try {
block();
} @catch {
// catch an error
}
现在想象一下,我想在块内添加一行以强制捕获。
我在 objective-C 中所做的是将这一行添加到一个块中
[NSException raise:@"Failed" format:@"Failed", nil];
现在我想在 Swift
let myClousure = closures[0]
do {
myClosure!()
} catch {
}
问题是:我应该在闭包中添加哪一行来强制执行相同的行为,或者换句话说,使闭包失败并触发捕获?
抱歉,如果这个问题很愚蠢,但我是 Swift 的新手。
在 Objective-C 中,您使用 @try
/@catch
块来处理 ObjC 异常,例如您提出的异常。在 Swift 中,您使用 do
/catch
块来捕获 Swift 明确从 "throwing" 函数抛出的错误。只有用"throws"关键字标记的函数(和闭包)才允许抛出错误,如果你调用了一个可以抛出的函数,你必须处理错误。
如果你有一个闭包数组,闭包的类型签名必须指定它可以抛出,例如
let blocks: [() throws -> Void] = // get some blocks
此时,您可以(而且确实必须)处理通过调用这些块抛出的任何错误:
let block = blocks[0]
do {
try block()
} catch let error {
print(error)
}
假设在Objective-C中有以下情况:一个块数组。
所以我想运行一个街区,我这样做:
myBlock block = blocks[0]();
现在想象一下 运行s 在 try
:
myBlock block = blocks[0];
@try {
block();
} @catch {
// catch an error
}
现在想象一下,我想在块内添加一行以强制捕获。
我在 objective-C 中所做的是将这一行添加到一个块中
[NSException raise:@"Failed" format:@"Failed", nil];
现在我想在 Swift
let myClousure = closures[0]
do {
myClosure!()
} catch {
}
问题是:我应该在闭包中添加哪一行来强制执行相同的行为,或者换句话说,使闭包失败并触发捕获?
抱歉,如果这个问题很愚蠢,但我是 Swift 的新手。
在 Objective-C 中,您使用 @try
/@catch
块来处理 ObjC 异常,例如您提出的异常。在 Swift 中,您使用 do
/catch
块来捕获 Swift 明确从 "throwing" 函数抛出的错误。只有用"throws"关键字标记的函数(和闭包)才允许抛出错误,如果你调用了一个可以抛出的函数,你必须处理错误。
如果你有一个闭包数组,闭包的类型签名必须指定它可以抛出,例如
let blocks: [() throws -> Void] = // get some blocks
此时,您可以(而且确实必须)处理通过调用这些块抛出的任何错误:
let block = blocks[0]
do {
try block()
} catch let error {
print(error)
}