Alamofire请求回复?

时间:2017-04-12 12:02:15

标签: swift3

我正在使用这个Alamofire请求并返回一个json

let todoEndpoint: String = "https://api.abc.com/api/v3/products?pid=uid8225&format=json&&offset=0&limit=10"
    Alamofire.request(todoEndpoint)
        .responseJSON { response in
            guard let json = response.result.value as? [String: Any] else {
                print("didn't get todo object as JSON from API")
                print("Error: \(response.result.error)")
                return
            }
            print(json)

}

现在我已经做了循环,我想使用这个json值,但我得到了:

  

错误:使用未解析的标识符json?

do {

        for (index,subJson):(String, JSON) in  json {

print("Index :\(index) Title: \(subJson)" )

} catch
{

            print("there was an error")

}

如上所述:

https://github.com/Alamofire/Alamofire#response-string-handler "请求的结果仅在响应闭包的范围内可用。根据响应或从服务器接收的数据执行的任何执行都必须在响应闭包内完成。"

如何在响应闭包范围之外使用此json值?

你能否建议

我需要编写任何完成处理程序吗?如何完成?

由于

1 个答案:

答案 0 :(得分:1)

更好地使用SwiftyJson轻松地与Almofire进行json解析,如下:

import Alamofire
import SwiftyJSON

 static func getRequest(urlString: URL?, Parameter:NSDictionary?, completion: @escaping (_ serverResponse: AnyObject?,_ error:NSError?)->()){

        Alamofire.request(urlString!, parameters:nil, headers: nil).responseJSON { response in

            if(response.result.value != nil){
                let serverResponse = JSON(response.result.value!)
                print("Array value is \(serverResponse.arrayValue)")


                     completion(serverResponse as AnyObject?, nil)
            }
            else{
                completion(nil, response.result.error as NSError?)
            }
        }

    }

你可以在一个单独的类中编写这个函数,比如NetworkLayer,然后从WebService调用的任何类中调用它,如下所示:

let url = NSURL(string: yourWebServiceUrlString)
        NetworkLayer.getRequest(urlString: url as URL?, Parameter: nil) { (serverResponse, error) in

            if (error == nil){
            print("Server response: \(serverResponse)")
            }
        }

注意:您也可以在其中传递参数字典。