为我可以用来操作 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 创建回调的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中使用 Alamofire 5.0 获取 3 级深度 JSON 值