从网址

时间:2016-02-29 15:23:10

标签: ios json swift firebase

通过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!)
 }

2 个答案:

答案 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);
}

在我打印密钥的地方,您可以使用子快照执行任何操作。