通过Firebase我正在调用许多url将其转换为UIImage,但不会以更正的顺序显示。打印功能标记为当前索引:
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)
})
Image Loader func:
func loadImage(urlString:String,i:Int)
{
let url = NSURL(string: urlString)
let data = NSData(contentsOfURL: url!)
self.eventi[i].image = UIImage(data: data!)
}
答案 0 :(得分:1)
将Firebase快照键放入数组中,将键:值对放入字典中。然后对键数组进行排序:
arrayOfKeys = Array(dict.keys) //swift
arrayOfKeys.sort {
return $0 < $1
}
然后你可以遍历数组来获取事件名称(键),它对应于字典中的对象(通过键访问它),它返回它的值。
或(我更喜欢这个)
只需取每个.value字典并将每个字典放入一个数组中,然后按eventName对数组进行排序(假设是关键字)
eventArray.sort({ $0.eventName > $1.eventName })
答案 1 :(得分:0)
Jay和Eric提到:字典没有明确的顺序。 FDataSnapshot
具有已定义的顺序,但是一旦将其转换为字典,就会将其丢弃。
因此,您应该简单地使用以下内容循环遍历快照的子项,而不是先转换为字典然后循环:
for child in snapshot.children {
let key = child.key as String
print(key);
}
在我打印密钥的地方,您可以使用子快照执行任何操作。