Swift 中的 JSON 解析
Posted
技术标签:
【中文标题】Swift 中的 JSON 解析【英文标题】:JSON Parsing in Swift 【发布时间】:2015-03-26 02:53:05 【问题描述】:我在做JSON Parsing in Swift tutorial by Ray Wenderlich。
在viewDidLoad()
中使用DataManager.getTopAppsDataFromAppsWithSuccess
时,在DataManager
块之外时无法打印出数组。
有人知道如何获取该块之外的数组值吗?
代码:
var apps = [String]()
override func viewDidLoad()
DataManager.getTopAppsDataFromAppsWithSuccess (ByodData) -> Void in
let json = JSON(data: ByodData)
if let appArray = json.array
for appDict in appArray
var appName: String = appDict["name"].stringValue
self.apps.append(appName)
println(self.apps)
输入 JSON:
[
"id":1,
"name":"AdobeReader",
"url":"comp2014group1.herokuapp.com/apps/1.json";
,
"id":2,
"name":"BBCiPlayer",
"url":"comp2014group1.herokuapp.com/apps/2.json";
,
"id":3,
"name":"BBCNews",
"url":"comp2014group1.herokuapp.com/apps/3.json";
,
"id":4,
"name":"BBCWeather",
"url":"comp2014group1.herokuapp.com/apps/4.json";
]
输出:
[]
【问题讨论】:
你能否指定你正在加载的 json 数据? JSON 数据如下:["id":1,"name":"AdobeReader","url":"comp2014group1.herokuapp.com/apps/1.json","id":2," name":"BBCiPlayer","url":"comp2014group1.herokuapp.com/apps/2.json","id":3,"name":"BBCNews","url":"comp2014group1.herokuapp.com/apps/3.json","id":4 ,"name":"BBCWeather","url":"comp2014group1.herokuapp.com/apps/4.json"] 您应该将其添加到问题文本中以提高可读性 那么有什么办法可以解决这个问题,基本上是获取应用名称并在 UIPicker 中显示它们? @skyline75489 是对的,您使用println
语句太快无法加载数据。
【参考方案1】:
这个函数getTopAppsDataFromAppsWithSuccess
似乎是一个异步函数,不会阻塞执行。因此,println(self.apps)
在实际检索数据之前立即执行。
JSON 数据应该没问题。只是不要尝试像那样打印它。 JSON数据准备好后就可以使用了。
【讨论】:
我想在 UIPickerView 上显示应用程序数组,但是当我使用 self.apps 时,我得到一个空白选择器。无论如何我可以从 DataManager 块中拉出数组 您可以使用块中 UIPickerView 的reloadAllComponents
函数来使用检索到的数据刷新选择器视图。但是,viewDidLoad
可能不是执行此操作的理想场所。因为在加载视图之前调用了viewDidLoad
。当您尝试刷新时,选择器视图本身可能还没有准备好。
那么有什么办法可以解决这个问题,基本上是获取应用名称并在 UIPicker 中显示它们?
最简单的方法是使用同步方法,这可能会导致一些滞后。但是您正在处理的数据似乎不是很大。所以应该没问题。以上是关于Swift 中的 JSON 解析的主要内容,如果未能解决你的问题,请参考以下文章