我有一个Objective-c函数,如下所示
+ (void) invokeSortingWithClassName: (NSString*) className functionName: (NSString*) functionName closure: (id(^)(NSArray* arr))closure;
我可以从一个快速的课程中调用这个方法。调用此方法的swift代码如下所示
SortHandler.invokeSorting(withClassName: className, functionName: functionName, closure:
{
args in
let something = unwrap(args!)
do
{
let returnValue = try closure(something as NSArray!) //this is another closure coming as a parameter in the function in which this code is written and this throws
return returnValue;
}
catch
{
throw error
}
return "-1" as! T
})
本质上,这个闭包引发了一个错误,我不确定,如何在这个函数的objective-c定义中处理这个错误。请帮我修复此错误
答案 0 :(得分:0)
虽然可以用throws
声明一个闭包,但是这个闭包还没有用throws
声明,所以你的闭包不能抛出 - 这正是错误信息告诉你的。
由于函数是在Objective-C中声明的,函数签名不能改为包含throws
,因为Objective-C对Swift异常一无所知。
在Swift和Objective-C之间转换错误处理的标准方法是让Objective-C块接收&NSError
参数。
如果您能够更改Objective-C方法签名,则应将其声明为
+(void) invokeSortingWithClassName: (NSString* _Nullable) className functionName: (NSString* _Nullable) functionName closure: (id _Nullable (^_Nullable)(NSArray* _Nullable arr, NSError* _Nullable * _Nullable error))closure;
这将允许您通过Objctive-C中的throw
参数收到错误来快速error
。
如果您无法更改方法签名,则需要在关闭中捕获异常,只需返回错误'值,例如nil