如何将数据从数组查询传递到视图文件?
How do I pass data from an array query to a view file?
你好!
由于我的上一个问题描述不当而且不是真正的问题,我决定重新标记我的问题。
我的问题是什么?
将数组从我的 Firestore 数据库传递到我的模型文件中的视图文件的最佳方法是什么?我的方法是否正确?
我目前的做法
基本上三个文件用于创建输出。我使用的代码来自另一个有效的函数,尽管它是一个不同的查询。
- 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()
}
}
}
- 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
}
}
}
}
- Friends_Requests_Data.swift(数据模型)
import Foundation
struct Friends_Requests_Data: Identifiable {
var id: String
var email: String
}
我遇到了什么错误?
Friends_Requests.swift(查看文件)
Friends_Model.swift(查看模型)
我做到了!
感谢上述用户的帮助,我设法让整个事情顺利进行。
我将我的视图模型功能更改为如下所示
(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
}
}
}
我也修改了这个 (Friends_Requests.swift):
- 添加了调用函数的init
init() {
friends_model.getFriendRequestData()
}
- 已更改
(旧)
List (friends_model.friend_requests) { item in
Text(item)
}
(新)
List (friends_model.friend_requests) { item in
Text(item.friendRequests)
}
你好!
由于我的上一个问题描述不当而且不是真正的问题,我决定重新标记我的问题。
我的问题是什么?
将数组从我的 Firestore 数据库传递到我的模型文件中的视图文件的最佳方法是什么?我的方法是否正确?
我目前的做法
基本上三个文件用于创建输出。我使用的代码来自另一个有效的函数,尽管它是一个不同的查询。
- 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()
}
}
}
- 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
}
}
}
}
- Friends_Requests_Data.swift(数据模型)
import Foundation
struct Friends_Requests_Data: Identifiable {
var id: String
var email: String
}
我遇到了什么错误?
Friends_Requests.swift(查看文件)
Friends_Model.swift(查看模型)
我做到了!
感谢上述用户的帮助,我设法让整个事情顺利进行。
我将我的视图模型功能更改为如下所示 (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
}
}
}
我也修改了这个 (Friends_Requests.swift):
- 添加了调用函数的init
init() {
friends_model.getFriendRequestData()
}
- 已更改 (旧)
List (friends_model.friend_requests) { item in
Text(item)
}
(新)
List (friends_model.friend_requests) { item in
Text(item.friendRequests)
}