根据 Firestore/SwiftUI 中集合中的 ID 获取字段数据

get the Field datas according to the Ids from the Collection in the Firestore/SwiftUI

所以,需要解决的问题。我们需要能够根据其ID

获取“用户”-(集合)中任何用户(字段)的数据

这些是我的尝试:

FriendProViewModel() :

@Published var uid: String
@Published var displayName: String
@Published var email: String

init(uid: String, displayName: String, email: String) {
    self.uid = uid
    self.displayName = displayName
    self.email = email
}

并检查结果:

@State var data = [FriendProViewModel]()


let db = Firestore.firestore()

var body: some View {
    VStack {
        ForEach((self.data), id: \.self.uid) { item in
            Text("\(item.displayName)")
            Text("\(item.email)")
        }
    }.onAppear {
//            self.fetchData()
        self.fetchData2()
    }
}

func fetchData() {
        // Remove previously data to prevent duplicate data
        self.data.removeAll()
        self.db.collectionGroup("users").getDocuments() {(querySnapshot, err) in
            if let err = err {
                print("Error getting documents \(err)")
            } else {
                for document in querySnapshot!.documents {
                    let uid = document.documentID
                    let displayName = document.get("displayName") as! String
                    let email = document.get("email") as! String

                    self.data.append(FriendProViewModel(uid: uid, displayName: displayName, email: email))
                }
            }
        }
    }

func fetchData2() {
    
    db.collection("users").document("pJSsQQ2qt6Xx9qqRGpVzRfWLgC33").getDocument { (document, error) in
        if let document = document, document.exists {
            let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
            print("Document data: \(dataDescription)")
        } else {
            print("Document does not exist")
        }
    }
}

这是我为 fetchData():

得到的结果

这是我为 fetchData2():

得到的结果

fetchData() 从所有“用户”检索所有数据。 fetchData2() 只是根据我给的 id 获取数据。 分别,我无法根据 id-s...

获取每个的数据

希望大家理解问题。感谢您的关注...

您没有正确设置和使用 FriendProViewModel。 Read-up 关于如何使用 ObservableObject.

Re-structure 您的代码使用 ObservableObject 及其组成结构,例如:

// a struct to hold each individual info
struct FriendModel {
    var uid: String
    var displayName: String
    var email: String
}

// an observable, to let the view know when it changes
class FriendProViewModel: ObservableObject {
    @Published var friends: [FriendModel] = []
}

在您的视图中这样声明:

 @StateObject var viewModel = FriendProViewModel() // instead of `data`

并像这样使用它:

 viewModel.friends.append(FriendModel(uid: uid, displayName: displayName, email: email))

 ForEach(viewModel.friends, id: \.uid) { item in ...}

我还建议您将 fetchData() 等移动到 FriendProViewModel