Google cloud firestore DispatchQUE获取firestore数据,但不';t填充阵列
这是我的第一个SwiftUI应用程序。我一直在阅读开发者信息和教程,但是我找不到我想要做的事情 这是一个图书馆应用程序,可以通过两种方式访问图书信息Google cloud firestore DispatchQUE获取firestore数据,但不';t填充阵列,google-cloud-firestore,swiftui,swiftui-navigationlink,Google Cloud Firestore,Swiftui,Swiftui Navigationlink,这是我的第一个SwiftUI应用程序。我一直在阅读开发者信息和教程,但是我找不到我想要做的事情 这是一个图书馆应用程序,可以通过两种方式访问图书信息 搜索字段->尚未搜索 描述书的特点 我正在使用Firestore文档处理第二个 我可以获得第一个列表(作者),并保存选定的作者。当我试图使用firestorm文档访问第二个描述列表(类型)时,问题就开始了。 DispatchQueue无法正常工作,因为它可以获取文档信息,但无法填充数组,因此始终发送空数组[]。如果我创建了数组genreItems并
import Foundation
struct DataBookModel: Hashable, Codable, Identifiable {
var id : Int
var dataBookModelString : String
}
用于选择作者的第一个列表为Array->
import Foundation
import SwiftUI
var AuthorsItems = [
DataBookModel(id: 1, dataBookModelString: "Stephen King"),
DataBookModel(id: 2, dataBookModelString: "Isaac Asimov"),
DataBookModel(id: 3, dataBookModelString: "Michael Cripton"),
DataBookModel(id: 4, dataBookModelString: "Anne Rice")
]
列表行
import Foundation
import SwiftUI
struct ItemsRow: View {
var dataBookModel : DataBookModel
var body: some View {
Text(dataBookModel.dataBookModelString)
}
}
作者
import Foundation
import SwiftUI
struct AuthorsList: View {
var body: some View {
VStack{
Text("Selecy author")
List(AuthorsItems){
item in
NavigationLink(destination: GenreList(dataBookModel: item)){
ItemsRow(dataBookModel: item)
}
}
}
}
}
第二个列表->GenreList
import Foundation
import SwiftUI
import FirebaseFirestore
import FirebaseFirestoreSwift
import Combine
struct GenreList : View {
var dataBookModel : DataBookModel
@ObservedObject var genreItems = GenreItems()
func saveAuthor() {
let selectedAuthor = String(dataBookModel.dataBookModelString)
if !selectedAuthor.isEmpty {
UserDefaults.standard.set(selectedAuthor, forKey: "selectedAuthor")
print("saved author: \(selectedAuthor)")
} else {
print("error: no author selected")
}
}
var body: some View {
VStack {
Text("Select Genre")
List(self.genreItems.genreItems) {
item in
ItemsRow(dataBookModel: item)
}
}.onAppear(){
print("genreList: \(self.genreItems.genreItems)")
self.saveAuthor()
}
}
}
import Foundation
import SwiftUI
import FirebaseFirestore
import Combine
class GenreItems: ObservableObject {
@Published var genreItems = [DataBookModel]()
init() {
print("memoria: \(self.genreItems)")
/*
genreItems = [
DataBookModel(id: 1, dataBookModelString: "Science fiction"),
DataBookModel(id: 2, dataBookModelString: "Comedy"),
DataBookModel(id: 3, dataBookModelString: "Terror")
]
*/
let selectedAuthor = UserDefaults.standard.value(forKey: "selectedAuthor")
print("saved author GenreItems: \(selectedAuthor)")
var db : Firestore!
db = Firestore.firestore()
db.collection("genres")
//.whereField("author", isEqualTo: selectedAuthor!)
.getDocuments(){
(querySnapshot, error) in
if let error = error {
print("Error en documentos: \(error.localizedDescription)")
} else {
var i = 0
for document in querySnapshot!.documents {
let valor = document.data()
print("búsqueda: \(valor)")
let genre = document.get("genre") as? String ?? "sin genre"
i += 1
let id = i
DispatchQueue.main.async {
let registro = DataBookModel(id: i, dataBookModelString: genre)
print("registro: \(registro)")
self.genreItems.append(registro)
print("genreItems: \(self.genreItems)")
}
}
print("result: \(self.genreItems)")
}
}
}
}
流派项目创建->流派列表
import Foundation
import SwiftUI
import FirebaseFirestore
import FirebaseFirestoreSwift
import Combine
struct GenreList : View {
var dataBookModel : DataBookModel
@ObservedObject var genreItems = GenreItems()
func saveAuthor() {
let selectedAuthor = String(dataBookModel.dataBookModelString)
if !selectedAuthor.isEmpty {
UserDefaults.standard.set(selectedAuthor, forKey: "selectedAuthor")
print("saved author: \(selectedAuthor)")
} else {
print("error: no author selected")
}
}
var body: some View {
VStack {
Text("Select Genre")
List(self.genreItems.genreItems) {
item in
ItemsRow(dataBookModel: item)
}
}.onAppear(){
print("genreList: \(self.genreItems.genreItems)")
self.saveAuthor()
}
}
}
import Foundation
import SwiftUI
import FirebaseFirestore
import Combine
class GenreItems: ObservableObject {
@Published var genreItems = [DataBookModel]()
init() {
print("memoria: \(self.genreItems)")
/*
genreItems = [
DataBookModel(id: 1, dataBookModelString: "Science fiction"),
DataBookModel(id: 2, dataBookModelString: "Comedy"),
DataBookModel(id: 3, dataBookModelString: "Terror")
]
*/
let selectedAuthor = UserDefaults.standard.value(forKey: "selectedAuthor")
print("saved author GenreItems: \(selectedAuthor)")
var db : Firestore!
db = Firestore.firestore()
db.collection("genres")
//.whereField("author", isEqualTo: selectedAuthor!)
.getDocuments(){
(querySnapshot, error) in
if let error = error {
print("Error en documentos: \(error.localizedDescription)")
} else {
var i = 0
for document in querySnapshot!.documents {
let valor = document.data()
print("búsqueda: \(valor)")
let genre = document.get("genre") as? String ?? "sin genre"
i += 1
let id = i
DispatchQueue.main.async {
let registro = DataBookModel(id: i, dataBookModelString: genre)
print("registro: \(registro)")
self.genreItems.append(registro)
print("genreItems: \(self.genreItems)")
}
}
print("result: \(self.genreItems)")
}
}
}
}