问题显示来自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); } 

在哪里打印密钥,你可以做任何你需要的孩子快照。