【问题标题】:Alamofire request response?Alamofire 请求响应?
【发布时间】:2017-04-12 12:02:14
【问题描述】:

我正在使用这个 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 值?

你能推荐一下吗

是否有任何我需要编写的完成处理程序以及如何完成?

谢谢

【问题讨论】:

  • GS,您是否尝试搜索解决方案,因为这个问题已经被问到超过 30 多个线程:google.se/…
  • do 块应该在警卫之后运行,即guard let else {...} HERE。目前,您在 json 不存在的范围内进行操作
  • 嗨亲爱的,感谢您的回复,如果我在范围内使用,那么请建议我在解析所有 json 值后是否可以在其他地方使用这些值,例如
  • 我有 items.append(name:name1) 并且这些值需要在不同的类中使用,例如 cell.titleLabel1.text = item.name1 ,因为我在循环中尝试过,但我没有能够获取值

标签: swift3


【解决方案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)")
            }
        }

注意:你也可以在里面传参数字典。

【讨论】:

  • 避免回答之前多次询问的重复问题。
  • 好的,我会处理的。
  • 嗨 Sneak,这个问题与你提到的线程中的问题有些不同,因为我搜索了链接但无法得到答案
  • @GS 你有没有尝试提供的代码。如果您需要任何帮助,请告诉我。
  • 谢谢 Aashish,你能建议我如何调用这个函数吗?
猜你喜欢
  • 2015-06-20
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 2017-05-06
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
相关资源
最近更新 更多