Alamofire 响应对象映射

Syn*_*ete 5 ios swift alamofire objectmapper swift3

我是 swift 3 编程的新手,我正在使用Alamofire进行 api 调用并避免繁琐的 json 配对,我正在使用AlamofireObjectMapper库。我有一个ApiController函数来进行 api 调用,下面是它的代码:

public static func makePostRequest<T: Mappable>(url: String, params: Parameters, networkProtocol: NetworkProtocol, responseClass: T){

    let headers = getHeaders()

    networkProtocol.showProgress()

    Alamofire.request(url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers)
        .validate()
        .responseData{ response in
            let json = response.result.value
            var jsonString = String(data: json!, encoding: String.Encoding.utf8)
            let responseObject = responseClass(JSONString: jsonString!)
            switch(response.result){
            case .success(_):
                networkProtocol.hideProgress()
                networkProtocol.onResponse(response: response)
                break
            case .failure(_):
                networkProtocol.hideProgress()
                networkProtocol.onErrorResponse(response: response)
                break
            }

    }
Run Code Online (Sandbox Code Playgroud)

我从服务器获取的 Json 响应模板是:

{
 "some_int": 10, 
 "some_array":[...]
}
Run Code Online (Sandbox Code Playgroud)

下面是我的模型类:

import ObjectMapper

    class BaseResponse: Mappable {
    var some_int: Int?
    var some_array: [Array_of_objects]?

    required init?(map: Map) {
        some_int <- map["some_int"]
        some_array <- map["some_array"]
    }

    func mapping(map: Map) {

    }
}
Run Code Online (Sandbox Code Playgroud)

下面是进行 api 调用的类函数:

public static func callSomeApi(params: Parameters, networkProtocol: NetworkProtocol){
    ApiHelper.makePostRequest(url: AppConstants.URLs.API_NAME, params: params, networkProtocol: networkProtocol, responseClass: BaseResponse)
}
Run Code Online (Sandbox Code Playgroud)

现在错误在下面一行

let responseObject = responseClass(JSONString: jsonString!)
Run Code Online (Sandbox Code Playgroud)

我无法理解如何转换jsonStringresponseClass我从视图控制器接受的通用对象

有人请帮我解决这个问题,在这个问题上停留了很长一段时间。

小智 0

您可以使用 SwiftyJSON: https: //cocoapods.org/pods/SwiftyJSON

以下是一些示例代码可以帮助您:

Alamofire.request(endpointURL, method: .get, parameters: params, encoding: URLEncoding.default, headers: nil).validate().responseJSON()
 {
        (response) in

        if response.result.isFailure
        {
            print("ERROR! Reverse geocoding failed!")
        }
        else if let value = response.result.value
        {
           var country: String? = nil
           var county: String? = nil
           var city: String? = nil
           var town: String? = nil
           var village: String? = nil

           print("data: \(value)")

           let json = JSON(value)

           print("json: \(json)")

           country = json["address"]["country"].string
           county = json["address"]["county"].string
           city = json["address"]["city"].string
           town = json["address"]["town"].string
           village = json["address"]["village"].string
        }
        else
        {
            print("Cannot get response result value!")
        }

 }
Run Code Online (Sandbox Code Playgroud)

请让您知道代码已经被简化(很多行已被删除)并从我的实际项目粘贴到这里,因此该代码未经测试,可能包含拼写错误或类似的内容,但逻辑是可见