Swift中的typealiasing闭包

时间:2018-05-17 03:39:54

标签: objective-c swift closures type-alias

我正在使用Objective-C开发的SDK。我的应用程序是混合的(支持Objc和Swift),我需要使用SDK的completionBlock。在SDK方面,它被定义为,

typedef void (^SomethingCompletionBlock)(NSArray<id<Something> > *_Nullable result, NSError *_Nullable error); 

在App方面,我需要使用like,

SDKService.fetchSomething(withModel: model) { (result, error) in

    if error != nil {

       completionBlock(result, error?)

    }
}

我想知道我的Swift部分中completionBlock的签名是什么?我正在尝试类似下面的内容,但却收到错误。

typealias SomethingSearchCompletionBlock = (result: Array<Something>?, error: Error?)

错误:

  

无法调用非函数类型的值   &#39; SomethingSearchCompletionBlock&#39; (又名&#39;(结果:   可选&gt;,错误:可选)&#39;)

2 个答案:

答案 0 :(得分:2)

您必须添加Void返回值,并且不需要参数标签

typealias SomethingSearchCompletionBlock = (Array<Something>?, Error?) -> Void

答案 1 :(得分:2)

这可能会有所帮助

typealias SomethingCompletionBlock = (_ result: [Something]?, _ erro: Error?) -> Void