Swift 对ForEach中的FireStore数据在int值之后进行排序

Swift 对ForEach中的FireStore数据在int值之后进行排序,swift,firebase,google-cloud-firestore,swiftui,Swift,Firebase,Google Cloud Firestore,Swiftui,我正在构建一个与当地摩托车越野锦标赛相关的应用程序,在那里你可以获得车手的排名。我有firebase firestore中的所有骑手,我知道如何根据类别筛选他们,但我想知道如何根据骑手在排行榜中的位置(升序)对列表进行排序,以便创建排名。我使用一个名为“poz”的INT值来确定在排行榜中的位置(1=1st等) 下面你可以找到我的观察员的代码 class clasamentobserver: ObservableObject { @Published var riders = [ride

我正在构建一个与当地摩托车越野锦标赛相关的应用程序,在那里你可以获得车手的排名。我有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

                        }
                    }
                }
            }
        }
    }
}
类clasamentobserver:observeObject{
@已发布的var-riders=[riderData]()
init(){
设db=Firestore.Firestore()
db.collection(“riders”).addSnapshotListener{(snap,err)in
如果错误!=零{
打印((错误?.localizedDescription)!)
回来
}
对于管理单元更改中的i{
如果i.type==.added{
设id=i.document.documentID
让image=i.document.get(“image”)作为!字符串
让nume=i.document.get(“nume”)作为!字符串
让club=i.document.get(“club”)作为!字符串
设poz=i.document.get(“poz”)为!Int
让mx=i.document.get(“mx”)作为!字符串
self.riders.append(riderData(id:id,image:image,nume:nume,club:club,poz:poz,mx:mx))
}
如果i.type==.removed{
设id=i.document.documentID

对于0中的j.听起来像是在寻找订购方(“poz”)

我强烈建议您查看上的Firebase文档,以了解有关订购工作原理的更多信息,以及有关查询的更多信息。

db.collection(“riders”).orderBy(“poz”)…
?另请参阅:非常感谢!订购(by:“poz”)做得很好!您是一位英雄,先生
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)
    }
}
db.collection("riders").orderBy("poz").addSnapshotListener{ (snap, err) in