我有一个包含Objective-C中定义的块的方法:

+(void)getNewList:(NewListRequestModel *)model returnInfo:(void(^)(NewListResponseModel* resModel))retModel;

我这样说:
[API getNewList:model returnInfo:^(NewListResponseModel *resModel) {
      //code
}];

在目标C中。
现在我想在Swift 3.2中调用它:
 API.getNewList(model, returnInfo: {(resModel: NewListResponseModel) -> () in
       //my code

  })

但我总有个错误:
Cannot convert value of type '(NewListResponseModel) -> Void' to expected argument type '((NewListResponseModel?) -> Void)!'

有人能帮我找到正确的方法来调用它吗?谢谢。

最佳答案

在Swift中,闭包很容易编写。编译器为您推断参数类型和返回类型,因此您只需编写参数名称并in

API.getNewList(model, returnInfo: {resModel in
    //my code
})

也可以使用尾随闭包语法:
API.getNewList(model) {resModel in
    //my code
}

发生此错误的原因是resModel实际上是可选类型。在最初的Objective-C代码中,resModel是一个指针,可以为空。当这个连接到swift时,它会变成NewListResponseModel?

10-06 07:39