swift - 在 int 值之后对 ForEach 中的 FireStore 数据进行排序
问题描述
我正在构建这个与当地摩托车越野锦标赛相关的应用程序,您可以在其中获得车手的排名。我在 firebase firestore 中有所有车手,我想出了如何在班级中过滤他们,但我想知道如何根据车手在排行榜内的位置(升序)对列表进行排序,以便创建排名。我正在使用一个名为“poz”的 INT 值来确定排行榜中的位置(1 = 1st 等)
您可以在下面找到我的观察者的代码
class clasamentobserver: ObservableObject {
@Published var riders = [riderData]()
init() {
let db = Firestore.firestore()
db.collection("riders").addSnapshotListener{ (snap, err) in
if err != nil{
print((err?.localizedDescription)!)
return
}
for i in snap!.documentChanges{
if i.type == .added {
let id = i.document.documentID
let image = i.document.get("image") as! String
let nume = i.document.get("nume") as! String
let club = i.document.get("club") as! String
let poz = i.document.get("poz") as! Int
let mx = i.document.get("mx") as! String
self.riders.append(riderData(id: id, image: image, nume: nume, club: club, poz: poz , mx: mx))
}
if i.type == .removed {
let id = i.document.documentID
for j in 0..<self.riders.count {
if self.riders[j].id == id {
self.riders.remove(at: j)
return
}
}
}
if i.type == .modified {
let id = i.document.documentID
let image = i.document.get("image") as! String
for j in 0..<self.riders.count {
if self.riders[j].id == id {
self.riders[j].image = image
return
}
}
}
}
}
}
}
在这里你可以找到视图
struct clasamentPage: View {
@ObservedObject var clasamentObserver = clasamentobserver()
var body: some View {
ZStack{
Color("background").edgesIgnoringSafeArea(.all)
ScrollView {
GeometryReader { geometry in
ZStack {
if geometry.frame(in: .global).minY <= 0 {
Image("t.ciolpani")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: geometry.size.width, height: geometry.size.height)
.offset(y: geometry.frame(in: .global).minY/9)
.clipped()
LinearGradient(gradient: Gradient(colors: [Color.gray, Color.clear]), startPoint: .top, endPoint: .bottom)
.frame(width: geometry.size.width, height: geometry.size.height)
.offset(y: geometry.frame(in: .global).minY/9)
.clipped()
} else {
Image("t.ciolpani")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: geometry.size.width, height: geometry.size.height + geometry.frame(in: .global).minY)
.clipped()
.offset(y: -geometry.frame(in: .global).minY)
LinearGradient(gradient: Gradient(colors: [Color.gray, Color.clear]), startPoint: .top, endPoint: .bottom)
.frame(width: geometry.size.width, height: geometry.size.height + geometry.frame(in: .global).minY)
.clipped()
.offset(y: -geometry.frame(in: .global).minY)
}
}
}.frame(height: 300)
VStack() {
TopPost()
if clasamentObserver.riders.isEmpty {
Text("No Posts")
.fontWeight(.heavy)
}else {
ForEach(clasamentObserver.riders){item in
riderCard(image: item.image, nume: item.nume, club: item.club, poz: item.poz)
}
}
}
}
}.edgesIgnoringSafeArea(.top)
}
}
任何提示都会非常有帮助!先感谢您!!
解决方案
听起来您正在寻找orderBy("poz")
:
db.collection("riders").orderBy("poz").addSnapshotListener{ (snap, err) in
我强烈建议您查看有关排序和限制数据的 Firebase 文档,了解有关排序工作原理的更多信息,以及有关排序工作原理的页面,以了解有关一般查询的更多信息。
推荐阅读
- java - 如何运行 jar。云 ubuntu 服务器上的文件?
- javascript - JavaScript 异步帮助 - 用于计算方向的 Google Maps JavaScript API
- bluetooth - BLE 外设无法正确显示
- arrays - GLSL 中可调整大小的数组
- python-3.x - 熊猫数据框上的多个日期操作
- python - 如何在 python 脚本上使用命令 azure cli 导出数据库
- for-loop - 当我按下 button2 时,我希望我的代码显示 4 form2 但它不会为什么呢?
- c++ - 分段错误线程
- javascript - Node.js readline 行为怪异
- excel - 也复制值和边框格式