假设我有以下列方式构建的JSON数据:
{ "fruits" : {
"apple": {
"name": "Gala"
"color": "red",
"picture": "//juliandance.org/wp-content/uploads/2016/01/RedApple.jpg",
"noOfFruit": [1, 2]
}
}
如何使用iOS版本的Firebase访问图片和noOfFruit数组?我想用一个列出苹果名称,颜色,苹果图片的单元格制作一个表格视图,然后列出水果的数量。我得到了如何获取“颜色”和“名称”值,但我如何访问数组并将其转换为字符串和图像,以便它在表格视图中显示图像?任何帮助表示赞赏!
答案 0 :(得分:2)
对于阵列,它非常简单。无论你有什么功能可以监听firebase的变化,我都会想到你的apple
键下的信息存储在let apple
等变量中
然后,您可以将noOfFruit的值转换为数组,如下所示:
let apple = // what you had before
guard let noOfFruit = apple["noOfFruit"] as? [Int] else {
return
}
//Here you have the array of ints called noOfFruit
对于图像,有几个选项。第一个(也是坏的)是同步获取URL的数据并将其设置为图像视图,如下所示:
let url = URL(string: picture)
let data = try? Data(contentsOf: url!) //this may break due to force unwrapping, make sure it exists
imageView.image = UIImage(data: data!)
采用这种方法的是不行。它将在发出请求并下载图像时阻止主线程,使应用程序无响应。
更好的方法是异步获取它。有几个库真的有帮助,比如AlamofireImage,但它可以用准系统基础很容易完成。为此,您应该使用URLSession类,如下所示:
guard let url = URL(string: picture) else {
return
}
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
print(error)
return
}
//Remember to do UI updates in the main thread
DispatchQueue.main.async {
self.myImageView.image = UIImage(data: data!)
}
}.resume()