迅速使用ObjectMapper lib映射字符串响应

时间:2018-09-07 07:35:28

标签: json mapping swift4 objectmapper

我尝试根据结果库使用对象映射器映射字符串响应。

这是结果类:

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 :(得分:0)

最后,我可以依靠此代码出了什么问题。

extension String : Mappable {

}

仅此而已。