保存文件,可以看到我们成功地拿到了 app 名字,但这次的办法要优雅得多了:
App(name: "Game of War - Fire Age", link: "https://itunes.apple.com/us/app/game-of-war-fire-age/id667728512?mt=8&uo=2")注意:如果在这里出现错误,说 topapps.json 不能打开,那可能是没有权限,请关闭开始项目,然后删除 derived data 文件夹中的内容。
我们已经知道如何解析本地数据——要怎样解析远程数据呢?
抓取远程 JSON让这个项目更完美些。通常我们需要抓取远程数据而不是本地文件。我们可以用一个网络请求抓取 App Store 的排行榜。
打开 DataManager.swift ,在 DataManager 的实现之前定义一个 topAppURL:
let topAppURL = "https://itunes.apple.com/us/rss/topgrossingipadapplications/limit=25/json"然后,在实现部分添加这个方法:
public class func getTopAppsDataFromItunesWithSuccess(success: @escaping ((_ iTunesData: Data) -> Void)) { //1 loadDataFromURL(url: URL(string: topAppURL)!) { (data, error) -> Void in //2 if let data = data { //3 success(data) } } }这个方法和之前的方法很相似,但这次使用了 URLSession 从 iTunes 抓取数据。代码解释如下:
打开主 playground 文件,将这句 :
DataManager.getTopAppsDataFromFileWithSuccess { (data) -> Void in替换为:
DataManager.getTopAppsDataFromItunesWithSuccess { (data) -> Void in现在你可以从 iTunes 获得数据了。
保存文件,你可以查看当前最热门的游戏是什么了。我看到的仍然是 “Saga 糖果消除”。我真的喜欢糖果消除游戏。
App(name: "Candy Crush Saga", link: "https://itunes.apple.com/us/app/candy-crush-saga/id553834731?mt=8&uo=2")你看到的可能和上面不同,因为苹果商店里的排行榜随时都在变。
通常人们不仅仅对排行榜的第一名感兴趣——他们会想了解整个排行榜的内容。你没有必要为此写码——只需要用这句:
topApps.feed?.entries Gloss 的底层机制如你所见,在解析 JSON 数据时 Gloss 很好用,但它的底层机制是怎样的呢?
<~~ 是一个自定义操作符,用来执行一系列 Decoder.decode 函数。Gloss 内置了对许多类型的解码支持:
在本教程中,你严重依赖 Decodable 模型。如果你需要更复杂的对象,你可以扩展 Decoder 并实现你自己的解码功能。
当然 Gloss 还能将对象转换回 JSON。如果你想了解这部分内容,请参考 Encodable 协议。
结束这里 下载完成的 playground 项目。
如果你更愿意采用本文前半部分描述的苹果的解析方式,你可以看一下苹果的 在 Swift 中使用 JSON 。它最终演示了一个如何编写使用 JSON 数据的网络层的实例非常有用。
但是,如果你更喜欢 Gloss 的方法,则需要密切关注它的新版本发布,因为它还在开发阶段。
分享给小伙伴们:
本文标签: Swift,JSON/">Swift,JSON
相关文章
发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。
本类最热新闻