从JSON数据块中访问URL和数组

时间:2017-02-10 17:30:57

标签: ios json swift firebase firebase-realtime-database

假设我有以下列方式构建的JSON数据:

{ "fruits" : {
    "apple": {
        "name": "Gala"
        "color": "red",
        "picture": "//juliandance.org/wp-content/uploads/2016/01/RedApple.jpg",
        "noOfFruit": [1, 2]
    }
}

如何使用iOS版本的Firebase访问图片和noOfFruit数组?我想用一个列出苹果名称,颜色,苹果图片的单元格制作一个表格视图,然后列出水果的数量。我得到了如何获取“颜色”和“名称”值,但我如何访问数组并将其转换为字符串和图像,以便它在表格视图中显示图像?任何帮助表示赞赏!

1 个答案:

答案 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()