Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to initialize the new Firebase @FirestoreQuery property wrapper with variables?

I use the new @FirestoreQuery property wrapper and it's working with the code below. But i need to use it/initialize it with variables, how can i do it (see below what I am trying to do)?

import SwiftUI
import FirebaseFirestoreSwift

struct TestFirestoreQuery: View {
    @State var itemLimit: Int = 5
    let increment: Int = 5
    
    @FirestoreQuery(collectionPath: "/discussions/blablabal/messages",
                    predicates: [
                        .order(by: "dateCreated", descending: true),
                        .limit(to: 5)
                    ]
    ) fileprivate var MessageResults: Result<[Message_M], Error>
    
    var body: some View {
        VStack {
            if case let .success(Messages) = MessageResults {
                List(Messages.reversed()) { message in
                    Text("\(message.msg)")
                }
                .refreshable{
                    itemLimit += increment
                    $MessageResults.predicates = [
                        .order(by: "dateCreated", descending: true),
                        .limit(to: itemLimit)
                    ]
                }
            }
            else if case let .failure(error) = MessageResults {
                // Handle error
                Text("Couldn't map data: \(error.localizedDescription)")
            }
            Button {
                itemLimit += increment
                $MessageResults.predicates = [
                    .order(by: "dateCreated", descending: true),
                    .limit(to: itemLimit)
                ]
            } label: {
                Text("Tap me!")
                    .padding()
                    .foregroundColor(.white)
                    .background(.red)
            }
        }
    }
}

what I want to do but it doesn't work :

...
    @State var itemLimit: Int = 5
    let increment: Int = 5
    let path: String = "/discussions/blablabal/messages"
    
    @FirestoreQuery(collectionPath: path,
                    predicates: [
                        .order(by: "dateCreated", descending: true),
                        .limit(to: itemLimit)
                    ]
    ) fileprivate var MessageResults: Result<[Message_M], Error>

...

I got these errors :

  • Cannot use instance member 'path' within property initializer; property initializers run before 'self' is available...

  • Cannot use instance member 'itemLimit' within property initializer; property initializers run before 'self' is available

like image 528
Flincorp Avatar asked Oct 26 '25 14:10

Flincorp


1 Answers

Ok you can initialize them in the onAppear :

.onAppear {
           $MessageResults.path = path

           $MessageResults.predicates = [
                          .order(by: "dateCreated", descending: true),
                          .limit(to: itemLimit)
                          ]

}
like image 153
Flincorp Avatar answered Oct 29 '25 03:10

Flincorp



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!