Alamofire 请求响应?

Posted

技术标签:

【中文标题】Alamofire 请求响应?【英文标题】:Alamofire request response? 【发布时间】: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 值?

你能推荐一下吗

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

谢谢

【问题讨论】:

Parsing JSON using the new Swift 3 and Alamofire的可能重复 GS,您是否尝试搜索解决方案,因为这个问题已经被问到超过 30 多个线程:google.se/… do 块应该在警卫之后运行,即guard let else ... HERE。目前,您在 json 不存在的范围内进行操作 嗨亲爱的,感谢您的回复,如果我在范围内使用,那么请建议我在解析所有 json 值后是否可以在其他地方使用这些值,例如 我有 items.append(name:name1) 并且这些值需要在不同的类中使用,例如 cell.titleLabel1.text = item.name1 ,因为我在循环中尝试过,但我没有能够获取值 【参考方案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,你能建议我如何调用这个函数吗?

以上是关于Alamofire 请求响应?的主要内容,如果未能解决你的问题,请参考以下文章

如何编写返回响应的alamofire请求函数?

Alamofire 响应与请求不匹配

请求失败时从 AlamoFire 获取 JSON 响应

使用 Alamofire 进行 GET 请求调用后没有响应

如何在响应闭包中访问 Alamofire 请求参数?

带有 XML 响应和正文的 SOAP 请求 swift 3,Alamofire