ios - 使用对象映射器映射响应

标签 ios swift

我正在使用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 有键时,这工作正常,但现在我必须处理这个 'data' 内没有键的 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 创建可映射类时遇到问题,因为它在数据中没有键。请帮忙!谢谢!

最佳答案

您可以尝试两种方法:

  1. Api.shared.post(obj: [TokenResponse].self, endPoint: EndPoints.availability.rawValue, params: [Keys.token:BaseVC.authToken, Keys.availability:NSNumber(value: isAvailable)] ,成功:成功 block )
  2. 编写另一个 BaseResponse 类,其中包含 var data:[T]?

关于ios - 使用对象映射器映射响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56008721/

相关文章:

当登录页面存在时,iOS 快速可达性应该失败

ios - 无法连接到iOS开发服务器

swift - 使用 Facebook 登录时出错

ios - 在后台调用 ios 应用程序并在应用程序关闭或终止时执行运行一些代码

Swift:按名称的对象实例

swift UICollectionView 只显示黑屏

ios - 如何在 Swift 中创建 .mp4 或 .mov 文件数组?

ios - 没有约束时如何设置imageview的高度

objective-c - 修改我的 CorePlot 代码以将日期放在 X 轴上

ios - 在 Swift 4 中从 uitextfields 将数据发布到服务器