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
}
所以,我正在使用来自 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
}