简体   繁体   English

如何将数据从数组查询传递到视图文件?

[英]How do I pass data from an array query to a view file?

Hi there!你好呀!

Since my last question was poorly described and not really a question, I've decided to re-brand my question.由于我的最后一个问题描述得不好而且不是一个真正的问题,所以我决定重新命名我的问题。

What is my question?我的问题是什么?

What is the best way to pass an array from my Firestore Database to my view file from my model file?将数组从我的 Firestore 数据库传递到我的 model 文件中的视图文件的最佳方法是什么? Is my approach even correct?我的方法是否正确?

My current approach我目前的做法

Essentially three files are used to create the output.基本上三个文件用于创建 output。 The code I used was from another function that does work, though it is a different query.我使用的代码来自另一个确实有效的 function,尽管它是一个不同的查询。

  1. Friends_Requests.swift (View file) Friends_Requests.swift (查看文件)
import SwiftUI
import Firebase
import FirebaseFirestore

struct Friends_Requests: View {
    @State var goBack: Bool = false
    @ObservedObject var friends_model = Friends_Model()

    
    var body: some View {
        if !goBack {
            VStack {
                
                Group{
                    Text("Your Friend Requests")
                        .font(.title)
                        .fontWeight(.bold)
                    Divider()
                }
                
                Spacer()
                List (friends_model.friend_requests) { item in
                    Text(item)
                }
                .refreshable{
                    friends_model.getFriendRequestData()
                    
                }
                .listStyle(.plain)
                
                
                Spacer()
                
                Group {
                    HStack{
                        Text("Friends requests will appear here")
                    }
                }
                
                
                Group {
                    Divider()
                    HStack {
                        Button(action: {
                            withAnimation {
                                self.goBack.toggle()
                            }
                        }) {
                            Image(systemName: "arrow.left.circle.fill")
                                .resizable()
                                .frame(width: 40, height: 40)
                        }
                        .padding(.leading, 20)
                        Spacer()
                    }
                }
            }
        } else if goBack {
            FriendsPanel()
        }
    }

struct Friends_Requests_Previews: PreviewProvider {
    static var previews: some View {
        Friends_Requests()
    }
}
}
  1. Friends_Model.swift (View model) Friends_Model.swift (查看模型)
import Foundation
import Firebase
import FirebaseFirestore
import SwiftUI


class Friends_Model: ObservableObject {
 
    @Published var friend_requests = [Friends_Requests_Data]()

    
    
    func getFriendRequestData() {
        let db = Firestore.firestore()
        
        let user = Auth.auth().currentUser
        let email = user?.email ?? "error: email"
        
        let queryRef = db.collection("users").document(email)
        
        queryRef.getDocument { snapshot, error in
            
            //check for errors
            if error == nil {
                print("no errors")
                
                if let snapshot = snapshot {
                    
                                
                    self.friend_requests = snapshot.get("friendRequests") { d in
                        
                            //Create friend item for each document
                            return Friends_Requests_Data(id: d.documentID,
                                                email: d["friendRequests"] as? String ?? "")
                    }
                                
            } else {
                // handle error
            }
            
        }
        
        
    }
}
  1. Friends_Requests_Data.swift (Data model) Friends_Requests_Data.swift (数据模型)
import Foundation

struct Friends_Requests_Data: Identifiable {
    var id: String
    var email: String
}

What error's am I getting?我得到了什么错误?

  • Friends_Requests.swift (View file) Friends_Requests.swift (查看文件) 查看文件中的错误

  • Friends_Model.swift (View model) Friends_Model.swift (查看模型) 视图模型中的错误

I did it!我做的!

Thanks to the help of the users above I managed to get the whole thing working.感谢上面用户的帮助,我设法让整个事情顺利进行。

I changed my View model function to look like this (Friends_Model.swift) :我改变了我的视图 model function 看起来像这样(Friends_Model.swift)

func getFriendRequestData() {
        let db = Firestore.firestore()
        
        let user = Auth.auth().currentUser
      
        let email = user?.email ?? "error: email"
        
        let queryRef = db.collection("users").whereField("friendRequests", arrayContains: email)
        
        queryRef.getDocuments { snapshot, error in
            
            //check for errors
            if error == nil {
                print("no errors")
                
                if let snapshot = snapshot {
                    
                    //Update the list property in main thread
                    //DispatchQueue.main.async {
                        //get all docs and create friend list
                        
                            self.friend_requests = snapshot.documents.map { d in
                                    //Create friend item for each document
                                return Friends_Requests_Data(id: d.documentID,
                                                        friendRequests: d["email"] as? String ?? "")
                                
                            }
                    //}
                }
                
            } else {
                // handle error
            }
            
        }
        
        
    }

I also changed this in my view (Friends_Requests.swift) :在我看来,我也改变了这一点(Friends_Requests.swift)

  • Added init to call the function添加了调用 function 的 init
init() {
        friends_model.getFriendRequestData()
}
  • Changed (Old)更改(旧)
    List (friends_model.friend_requests) { item in
                        Text(item)
    }

(New) (新的)


    List (friends_model.friend_requests) { item in
                        Text(item.friendRequests)
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何将数据从一个 SwiftUI 视图文件传递到另一个? - How do I pass data from one SwiftUI view file to another? 如何将数据从ViewController传递到Container View? - How do I pass data from my ViewController to a Container View? 如何将数据从 viewController 传递到 swiftUI 视图? - How do I pass data from viewController to swiftUI view? 如何将数据从异步任务传递到视图控制器? - How do I pass data from an asynchronous task to a view controller? 如何将数据从第三视图控制器传递回第一视图控制器? - How Do I Pass Data from Third View Controller Back to First View Controller? 如何将数据从View Controller传递到Container View? - How would I pass data from a View Controller to a Container View? 如何将NSSString从RootViewController传递到另一个视图? - How Do I Pass a NSSString from RootViewController to another View? Swift - 如何在 Swift 查看 Data.swift 文件中的数据? - Swift - How do I show Data in Swift View from Data.swift file? 如何将数据从父视图传递到子视图? - How can I pass data from parent to child view? 如何在UINavigationController中将指针从View 3备份传递到View 2到View 1? - How do I pass pointers back up from View 3 to View 2 to View 1 in a UINavigationController?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM