【问题标题】:Swift function generic parameterSwift 函数泛型参数
【发布时间】:2018-05-21 04:36:45
【问题描述】:

所以,我正在使用来自 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 的模型而变化

谁能指导我如何正确地做到这一点?谢谢!

【问题讨论】:

    标签: swift generics alamofire objectmapper


    【解决方案1】:

    你需要使用泛型!

    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 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多