如何将 Objective-C 块转换为 Swift 闭包
How to convert Objective-C block to Swift closure
我有一个方法包含在 Objective - C:
中定义的块
+(void)getNewList:(NewListRequestModel *)model returnInfo:(void(^)(NewListResponseModel* resModel))retModel;
我这样调用它:
[API getNewList:model returnInfo:^(NewListResponseModel *resModel) {
//code
}];
在 Objective - 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)!'
谁能帮我找到调用它的正确方法?谢谢。
试试这个:
class func getNewList(model: NewListResponseModel
returnInfo: ((_ resModel: NewListResponseModel?) -> Void)?){
}
API.getNewList(model, returnInfo: {(resModel) in
//my code
})
在Swift中,闭包的编写非常简单。编译器会为您推断参数类型和 return 类型,因此您需要做的就是编写参数名称和 in
:
API.getNewList(model, returnInfo: {resModel in
//my code
})
您还可以使用尾随闭包语法:
API.getNewList(model) {resModel in
//my code
}
错误发生是因为resModel
实际上是可选类型。在原始 Objective-C 代码中,resModel
是一个指针,可以为空。当桥接到 swift 时,它变成 NewListResponseModel?
.
//MARK: Class 传递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
})
我有一个方法包含在 Objective - C:
中定义的块+(void)getNewList:(NewListRequestModel *)model returnInfo:(void(^)(NewListResponseModel* resModel))retModel;
我这样调用它:
[API getNewList:model returnInfo:^(NewListResponseModel *resModel) {
//code
}];
在 Objective - 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)!'
谁能帮我找到调用它的正确方法?谢谢。
试试这个:
class func getNewList(model: NewListResponseModel
returnInfo: ((_ resModel: NewListResponseModel?) -> Void)?){
}
API.getNewList(model, returnInfo: {(resModel) in
//my code
})
在Swift中,闭包的编写非常简单。编译器会为您推断参数类型和 return 类型,因此您需要做的就是编写参数名称和 in
:
API.getNewList(model, returnInfo: {resModel in
//my code
})
您还可以使用尾随闭包语法:
API.getNewList(model) {resModel in
//my code
}
错误发生是因为resModel
实际上是可选类型。在原始 Objective-C 代码中,resModel
是一个指针,可以为空。当桥接到 swift 时,它变成 NewListResponseModel?
.
//MARK: Class 传递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
})