在objective-c中快速处理关闭

时间:2017-03-30 06:26:46

标签: ios objective-c swift

我有一个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
})

在闭包定义开始时,我收到了这个附加错误 enter image description here

本质上,这个闭包引发了一个错误,我不确定,如何在这个函数的objective-c定义中处理这个错误。请帮我修复此错误

1 个答案:

答案 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