我有一个包含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?
。