我正在尝试按日期对获得的数据进行排序,但它不起作用。 这是我要排序的数据:
{
"events": {
"Saturday, May 6, 2016" : [ null, {
"Id" : 3,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
}, {
"Id" : 4,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
} ],
"Saturday, April 8, 2016" : [ null, {
"Id" : 1,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
}, {
"Id" : 2,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
} ]
}
}
我希望它们按日期排序,但问题是日期是项目列表的键。 我怎样才能做到这一点?
我已经尝试过,但它不起作用:
ref.child("events").queryOrderedByKey().observeSingleEvent(of: .value, with: { (snapshot) in
let results = snapshot.value as! [String: Any]
for (eventDate, arr) in results {
let eventsDate = EventsDate()
eventsDate.eventsDate = eventDate
print(eventDate)
}
})
谢谢
最佳答案
您的数据按键(日期)排序,但问题是您的键是一个字符串,而字符串按字母顺序排序。因此,您将首先获取所有周五星期五,然后是周一,依此类推。
要按时间顺序排序,您需要使用一种将日期表示为升序数字的格式,即时间戳。 Firebase 有一个漂亮的自动填充快捷方式 timestamps当它们写入数据库时以标准格式,但不幸的是,这只适用于您需要创建数据的时间。然而,为任意日期和时间生成时间戳并不困难,并且有很多库可以将其来回转换为您在 UI 中喜欢的任何人类可读格式。如果您仅对日期感兴趣,您可能可以使用 ISO-8601 等简单的可排序格式:
{
"events": {
"2016-05-06" : [ null, {
"Id" : 3,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
}, {
"Id" : 4,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
} ],
"2016-04-08" : [ null, {
"Id" : 1,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
}, {
"Id" : 2,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
} ]
}
}
你用 arrays 做的事情也是非常不可取的在数据中,但这是另一个话题了。
关于ios - Firebase 按日期对数据排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42772942/