отображение строки ответа с помощью ObjectMapper lib в swift - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь отобразить строковый ответ с помощью сопоставителя объектов по моей базе результатов.

это класс результата:

import ObjectMapper

class Result< T : Mappable > : Mappable {

   var data: T?
   var status: String?
   var message: String?
   var error: String?

   init?(data: T?, status: String?, error: String?){
       self.data = data
       self.status = status
       self.error = error
   }

   required init?(map: Map){
   }

   func mapping(map: Map) {
       data    <- map["data"]
       status  <- map["status"]
       message <- map["message"]
       error   <- map["error"]
   }
}

а также это мой класс сети:

import Foundation
import ObjectMapper

final class Network<T:Mappable>{

init() {
}

open func requestItem(_ router: BaseRouter, completionHandler: @escaping (Any?, Error?) -> Void) {
    APIClient.Instance.requestJSON(router) { (response, error) in

        if let error = error {
            completionHandler(nil, APIError(code:ErrorCode.NetworkFailed, message:error.localizedDescription))
        }
        else if let json = response {

            var convertedString : String?

            do {
                let data1 =  try JSONSerialization.data(withJSONObject: json, options: JSONSerialization.WritingOptions.prettyPrinted)
                convertedString = String(data: data1, encoding: String.Encoding.utf8)
                print(convertedString!.description)

            } catch let myJSONError {
                print(myJSONError)
            }

            let result : Result<T>? = Mapper<Result<T>>().map(JSONString: convertedString!)

            if let success = result?.status, success == "success" {
                completionHandler(result?.data, nil)
            }
            else {
                completionHandler(nil, APIError(code:ErrorCode.HandledInternalError, message:(result?.error)!))
            }
        }
        else {
            completionHandler(nil, APIError(code:ErrorCode.EmptyJSONException, message:"Empty JSON Exception"))
        }
    }
  }
}

ответ:

{
   "status" : "success",
   "data" : "01CPSE6AQXVK554MTGENETKW24"
}

Я пытаюсь отобразить его, но из-за того, что String не является сопоставляемым классом, я не могу этого сделать. Переменная map ["data"] должна назначать только строку, а не другой сложный класс. Кто-нибудь может мне помочь с этой проблемой?

Наконец, ошибка: enter image description here

1 Ответ

0 голосов
/ 22 ноября 2018

Наконец, я могу полагаться на то, что не так с этим кодом.

extension String : Mappable {

}

Вот и все.

...