繁体   English   中英

Swift函数通用参数

[英]Swift function generic parameter

因此,我正在使用来自github的alamofire和对象映射器库。

在我的函数中有此代码

Alamofire.request(urlRequest).responseObject { (response: DataResponse<News>) in }

我也与状态代码一起进行响应检查

switch response.result {
            case .success:
                if let object = responseObject {
                    completion(object)
                }
                break;
            case .failure(let error):
                print(error)
                if let statusCode = response.response?.statusCode {
                    var message = String()
                    switch statusCode {
                        //status code checking here 
                    }
                }
                else {
                    var message = String()
                    message = error.localizedDescription
                }
                break;
        }

所以我有几个api调用,所有api调用也都将实现此状态代码检查。 我不想为我所有的api调用函数保留复制粘贴的这段代码

所以我打算做的是创建一个专用函数来检查api调用中的状态代码

但是我面临一个问题。 如何创建接受所有类型的DataResponse <>的通用函数参数?

我试图运行此代码,但失败了

// validateResponse function
static func validateResponse(dataResponse: DataResponse<Any>) -> String {
    // status code checking here 
}

// inside the alamofire.request response
validateResponse(dataResponse: response)

// return me this error 
Cannot convert value of type 'DataResponse<News>' to expected argument type 'DataResponse<Any>'

DataResponse <>将始终根据alamofire.responseObject中提供的模型进行更改

谁能指导我如何正确执行操作? 谢谢!

您需要使用泛型!

static func validateResponse<T>(dataResponse: DataResponse<T>) -> String {
    // status code checking here 
}

用法:

validateResponse(dataResponse: response)

通用参数T将由News推断,就好像该方法是这样的:

static func validateResponse(dataResponse: DataResponse<News>) -> String {
    // status code checking here 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM