2016-07-14 87 views
0

在过去的三天里,我一直在试图取得一些进展,但无论我尝试什么,我似乎都无法围绕如何解决这个问题问题。这个答案是让我几乎所有的方式(但不完全):Capturing data from Alamofire为Alamofire创建回调函数,我可以用它来操纵JSON

我想要做的是获得一个应用程序的评论数。由于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) 
} 
+0

你是不是解析'JSON'正确。粘贴你的JSON数据,以便我们可以更好地帮助你。 – Dershowitz123

+0

嗨,Json显示在这里:https://itunes.apple.com/de/rss/customerreviews/id=529479190/json – Patrick

回答

0

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

//改变你的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 
    } 
+0

谢谢Kuntal。它似乎仍然没有工作 - 最终的funcGetRattingJson采取了什么样的价值? – Patrick

相关问题