1 Câu hỏi: Phản hồi ánh xạ với Object Mapper

câu hỏi được tạo ra tại Mon, May 6, 2019 12:00 AM

tôi đang sử dụng api gọi. Tôi đã viết một phương pháp chung để xử lý tất cả các cuộc gọi api. Dưới đây là phương pháp

 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)
            }
        }
    }

Lớp BaseResponse của tôi

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) {}
}

Bây giờ tôi thường sử dụng phương pháp trên như thế này

 Api.shared.post(obj: TokenResponse.self, endPoint: EndPoints.availability.rawValue, params: [Keys.token:BaseVC.authToken, Keys.availability:NSNumber(value: isAvailable)], success: successBlock)

Điều này hoạt động tốt khi phản hồi json có khóa nhưng bây giờ tôi phải xử lý json này không có khóa trong 'dữ liệu'

{
    "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"
            }
        }
    ]
}

Tôi gặp sự cố khi tạo lớp có thể ánh xạ cho json ở trên vì nó không có khóa trong dữ liệu. Hãy giúp tôi! cảm ơn!

    
0
1 Câu trả lời                              1                         

Có hai cách tiếp cận bạn có thể thử:

  1. Api.shared.post(obj: [TokenResponse].self, endPoint: EndPoints.availability.rawValue, params: [Keys.token:BaseVC.authToken, Keys.availability:NSNumber(value: isAvailable)], success: successBlock)
  2. Viết một lớp BaseResponse khác có var data:[T]?
0
2019-05-06 17: 50: 12Z
  1. [TokenResponse]. chính điều này không hoạt động.
    2019-05-07 07: 13: 27Z
  2. dữ liệu var: [T]? cái này cũng không hoạt động. Bởi vì [T] không phù hợp với ánh xạ.
    2019-05-07 07: 29: 37Z
  3. Tôi đã sử dụng tại đây và nó phù hợp với Mappable
    2019-05-07 18: 37: 13Z
nguồn đặt đây