如何在Swift 3.0中调用此Objectice-C类方法?

时间:2017-05-19 01:49:46

标签: ios objective-c swift

我想在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...
        }

1 个答案:

答案 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