问题显示来自url的图像数组
通过Firebase,我打电话给很多URL将其转换为UIImage,但不是以正确的顺序显示。 打印function标记为:
0 2 1 3 4
JSON是这样的:
{ "evento_1" = "http://.altervista.org/evento1.jpeg"; "evento_2" = "http://.altervista.org/evento2.jpeg"; "evento_3" = "http://.altervista.org/evento3.jpeg"; "evento_4" = "http://.altervista.org/evento4.jpeg"; "evento_5" = "http://.altervista.org/evento5.jpeg"; }
获取数据的函数:
ref.observeEventType(.Value, withBlock: { snapshot in let nsDictionary = snapshot.value as? NSDictionary for (key, value) in nsDictionary! { dict[key as! String] = value } var index = 0 for (_, url ) in dict { self.loadImage(url as! String, i: index) index++ } }, withCancelBlock: { error in print(error.description) })
图像加载器function:
func loadImage(urlString:String,i:Int) { let url = NSURL(string: urlString) let data = NSData(contentsOfURL: url!) self.eventi[i].image = UIImage(data: data!) }
将您的Firebase快照键放入一个数组中,并将键值对组合到字典中。 然后对键列进行sorting:
arrayOfKeys = Array(dict.keys) //swift arrayOfKeys.sort { return $0 < $1 }
那么你可以迭代数组来获取事件名称(键),它对应于你的字典中的对象(通过键访问它),它返回它的值。
或者(我更喜欢这个)
只要把每一个.value字典放到一个数组中,然后用eventName对数组进行sorting(假设这是关键字)
eventArray.sort({ $0.eventName > $1.eventName })
正如杰伊和埃里克所说:字典没有明确的顺序。 FDataSnapshot
确实有一个定义的顺序,但是一旦你把它转换成一个字典,就扔掉了。
所以,不要先转换成字典,然后循环,你应该简单地使用下面的代码循环快照的子节点:
for child in snapshot.children { let key = child.key as String print(key); }
在哪里打印密钥,你可以做任何你需要的孩子快照。