我有一个方法,其中包含一个在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)!'
有人可以帮我正确地调用它吗?感谢。
答案 0 :(得分:4)
在Swift中,可以很容易地编写闭包。编译器为您推断出参数类型和返回类型,因此您需要做的就是编写参数名称in
:
API.getNewList(model, returnInfo: {resModel in
//my code
})
您还可以使用尾随闭包语法:
API.getNewList(model) {resModel in
//my code
}
发生错误是因为resModel
实际上是可选类型。在最初的Objective-C代码中,resModel
是一个指针,可以为null。当这被桥接到swift时,它变成NewListResponseModel?
。
答案 1 :(得分:2)
试试这个:
class func getNewList(model: NewListResponseModel
returnInfo: ((_ resModel: NewListResponseModel?) -> Void)?){
}
API.getNewList(model, returnInfo: {(resModel) in
//my code
})
答案 2 :(得分:2)
// MARK:传递requestModel并获取响应模型的类函数
class func getNewList(model: NewListRequesstModel, completion: @escaping (returnModel: NewListResponseModel) -> Void) {
//Your code to get new model for retrun
}
API.getNewList(model: newModelObject, completion: { (retunModelobject) in
//your code
})