我想在Swift 3.0中使用块调用OC类方法:
@interface API : NSObject
+ (void)GetCommissionInfoWithModel:(CommissionInfoRequestModel*)model returnInfo:(void (^)(CommissionInfoResponseModel*resModel))callBackBlock;
我试着调用它:
API.GetCommissionInfoWithModel(CommissionInfoRequestModel...
但我不知道如何继续。我知道如何调用一个简单的方法,如:
API.test()
API.test(para1:"1",para2:"2")
我试过了:
让someModel:CommissionInfoRequestModel = CommissionInfoRequestModel.model()
但我又遇到了另一个错误:
model()不可用:使用对象构造'BaseModel()
是的,CommissionInfoRequestModel
是从“BaseModel”继承的,但为什么我不能使用CommissionInfoRequestModel()?
我收到的错误如下:
Cannot convert value of type '(CommissionInfoResponseModel) -> ()' to expected argument type '((CommissionInfoResponseModel?) -> Void)!'
当我使用代码时:
API.GetCommissionInfoWithModel(someModel1){
(resModel: CommissionInfoResponseModel) in
// Response available in 'resModel' parameter...
}
答案 0 :(得分:0)
试试这个:
let someModel: CommissionInfoRequestModel = ...
API.GetCommissionInfoWithModel(someModel) {
resModel in
// Response available in 'resModel' parameter...
}
这个更长的形式只是语法糖:
API.GetCommissionInfoWithModel(someModel, returnInfo: {
(resModel: CommissionInfoResponseModel?) in
...
})
在两个版本中,最后一个参数是闭包:
Closures 是自包含的功能块,可以在代码中传递和使用。 Swift中的闭包类似于C和Objective-C中的 blocks 以及其他编程语言中的lambdas。
有关详细信息,请参阅The Swift Programming Language book。