2016-07-14 52 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

相關問題