ios - 使用对象映射器映射响应
问题描述
我正在使用https://github.com/tristanhimmelman/ObjectMapper来映射我对 api 调用的响应。我编写了一个通用方法来处理所有 api 调用。下面是方法
func post<T: Mappable>(obj: T.Type, endPoint:String ,params:[String:Any], success : @escaping (T) -> Void, failure : @escaping (String) -> Void){
Alamofire.request(baseUrl+endPoint,method: .post, parameters:params).responseObject { (response:DataResponse<BaseResponse<T>>) in
switch response.result {
case .success(let response):
if let status = response.status, status.isSuccess {
if let data = response.data{
success(data)
}
else{
failure(kServerErrorData)
}
}
else{
if let message = response.message {
failure(message)
}else {
failure(kServerError)
}
}
case .failure(let error):
failure(error.localizedDescription)
}
}
}
我的 BaseResponse 课程
struct BaseResponse<T:Mappable>:Mappable{
var status:Int?
var message:String?
var data:T?
mutating func mapping(map: Map) {
status <- map["status"]
message <- map["message"]
data <- map["data"]
}
init?(map: Map) {}
}
现在通常我使用上面这样的方法
Api.shared.post(obj: TokenResponse.self, endPoint: EndPoints.availability.rawValue, params: [Keys.token:BaseVC.authToken, Keys.availability:NSNumber(value: isAvailable)], success: successBlock)
当响应 json 有键时这很好用,但现在我必须处理这个在“数据”中没有键的 json
{
"status": 200,
"message": "Patient List",
"data": [
{
"user_info": {
"name": "abx",
"email": "abx@abx.com.pk",
"phone": "4087082831"
},
"patient_info": {
"p_name": "abx",
"p_email": "abx@abx.com.pk",
"p_phone": "4087082831"
}
},
{
"user_info": {
"name": "abx",
"email": "abx@abx.com.pk",
"phone": "4087082831"
},
"patient_info": {
"p_name": "abx",
"p_email": "abx@abx.com.pk",
"p_phone": "4087082831"
}
}
]
}
我在为上述 json 创建可映射类时遇到问题,因为它在数据中没有键。请帮忙!谢谢!
解决方案
您可以尝试两种方法:
Api.shared.post(obj: [TokenResponse].self, endPoint: EndPoints.availability.rawValue, params: [Keys.token:BaseVC.authToken, Keys.availability:NSNumber(value: isAvailable)], success: successBlock)
- 写另一个
BaseResponse
有var data:[T]?
推荐阅读
- python - 在 pyflink 中找不到用户定义的指标
- react-leaflet - net::ERR_INVALID_URL 传单反应标记
- amazon-personalize - 根据日期范围和库存(可为空值)过滤亚马逊个性化可用性
- java - 什么时候在内存中创建 Java 变量?
- c++ - 模板成员函数和继承
- latex - 如何在我的 windows 机器上使用 neovim 作为 LaTeX 编辑器?
- comlink - comlink web worker 抛出的错误会丢失非标准属性
- javascript - 有没有办法在javascript中代理(拦截)类的所有方法?
- powershell - 在Powershell中切换用户“su -”等价物?
- postgresql - pg_restore: [archiver] 输入文件似乎不是有效的存档