为我可以用来操作 JSON 的 Alamofire 创建回调

Posted

技术标签:

【中文标题】为我可以用来操作 JSON 的 Alamofire 创建回调【英文标题】:Creating Callback for Alamofire that I can use to manipulate JSON 【发布时间】:2016-07-14 20:56:42 【问题描述】:

在过去的三天里,我一直在尝试在这方面取得一些进展,但无论我尝试什么,我似乎都无法解决如何解决这个问题。这个答案让我(我认为)几乎一路走到了那里(但不完全):Capturing data from Alamofire

我要做的是获取应用的评论数量。因为 Alamofire 异步执行其网络调用,所以我试图创建一个回调,然后允许我实际使用它返回的 JSON。在下面的代码中,我试图在我的 Alamofire 函数之外获取评论 JSON,并将其分配给 reviewJSON 变量,以便我可以用它来做事。我做错了什么?

import UIKit
import SwiftyJSON
import Alamofire


class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 

let appStoreReviewsURL: String = "https://itunes.apple.com/de/rss/customerreviews/id=529479190/json"


func getDataFromInterwebs(theURL: String, complete:(reviews: JSON) -> ()) 

    Alamofire.request(.GET, theURL).responseJSON  response in
            guard response.result.error == nil else 
                print("error calling GET ")
                print(response.result.error!)
                return
            

            if let value = response.result.value 
                let appReviewsFromAppStore = JSON(value)
complete(reviews: appReviewsFromAppStore)
            
            else 
                print("error parsing")
            

    



override func viewDidLoad() 
    super.viewDidLoad()

    var reviewJson = getDataFromInterwebs(appStoreReviewsURL) completion in
        return completion

        print(reviewJson)

【问题讨论】:

您没有正确解析JSON。粘贴您的 json 数据,以便我们更好地帮助您。 嗨,Json 显示在这里:itunes.apple.com/de/rss/customerreviews/id=529479190/json 【参考方案1】:

请尝试以下方式。看看它是否适合你

// 像这样改变你的 getDataFromInterwebs

func getDataFromInterwebs(theURL: String, complete:(reviews: JSON) -> Void) 

                Alamofire.request(.GET, theURL).responseJSON  response in
                    guard response.result.error == nil else 
                        print("error calling GET ")
                        print(response.result.error!)
                        return
                    

                    if let value = response.result.value 
                        let appReviewsFromAppStore = JSON(value)
                        complete(reviews: appReviewsFromAppStore)
                    
                    else 
                        complete(reviews: "Error occured while trying to parse data")
                        print("error parsing")
                    

                
            
    

那么在viewdidload中是这样的

    override func viewDidLoad() 
        super.viewDidLoad()
        getDataFromInterwebs(appStoreReviewsURL)  (reviews) in
            var reviewJson = reviews
            dispatch_async(dispatch_get_main_queue(),  
                self.didGetRattingJson(reviewJson)
            )
        

最后

func didGetRattingJson(reviewJson: JSON) 
        //do whatever you want to do here
    

【讨论】:

感谢昆塔尔。但它似乎仍然不起作用 - 最终函数 didGetRattingJson 取什么值?

以上是关于为我可以用来操作 JSON 的 Alamofire 创建回调的主要内容,如果未能解决你的问题,请参考以下文章

使用 Alamofire 调用 JSONArray

在 Swift 中使用 Alamofire 5.0 获取 3 级深度 JSON 值

Alamofire 嵌套 JSON 序列化器

如何使用 Alamofire 和 SwiftyJSON 访问嵌套的 JSON 值?

Alamofire 参数与类中的数组

Swift Alamofire JSON 解析