[英]Display custom information according to NavigationLink Text Swift, Cloud Firestore
我有这个代码可以从集合“specialities”中获取带有 autoID 的字段“spty”:
struct Spty: Identifiable{
var id: String = UUID().uuidString
var spty: String
}
class SptyViewModel: NSObject, ObservableObject{
@Published var specialities = [Spty]()
func fetchData(){
let db = Firestore.firestore()
db.collection("specialities").addSnapshotListener { (querySnapshot, error) in
guard let documents = querySnapshot?.documents else {return }
self.specialities = documents.map { (queryDocumentSnapshot) -> Spty in
let data = queryDocumentSnapshot.data()
let spty = data["spty"] as? String ?? ""
return Spty(spty: spty)
}
}
}
}
它们使用 ForEach 显示:
@StateObject var sptyModel = SptyViewModel()
ForEach(sptyModel.specialities){ spty in
NavigationLink(destination: More()) {
Text(spty.spty).foregroundColor(.black)
和代码一样,每个Text(spty.spty)
都是一个NavigationLink,所以我想要的是根据我按下的Text显示不同的信息。
我目前正在处理这个 getDocuments:
struct Testtt: Identifiable{
var id: String = UUID().uuidString
var name: String
}
class TesteViewModel: NSObject,ObservableObject{
@StateObject var LocationModel = LocationViewModel()
let db = Firestore.firestore()
@Published var testsss = [Testtt]()
@Published var sptyModel = SptyViewModel()
@Published var SptyNameee = [Spty]()
func testeApp(){
db.collection("Test").whereField("Los Angeles", isEqualTo: true).getDocuments { (querySnapshot, err) in
guard let documents = querySnapshot?.documents else {return }
self.testsss = documents.map { (queryDocumentSnapshot) -> Testtt in
let data = queryDocumentSnapshot.data()
let name = data["Name"] as? String ?? ""
return Testtt(name: name)
}
}
}
}
.whereField
我一直在想的是,要回答这个问题,我需要涉及collection()
在testeApp()与spty.spty
,但并没有成功地做到这一点。
有任何想法吗?
编辑:
[![2][4]][4]
为了澄清我的问题,我添加了有关我目前如何管理数据的屏幕截图:
我得到了3个NavLinks Home View
手风琴集“特色”和上面给出的代码: Cardiologista
, Cirurgião Geral
和Oftalmoloista
然后,如果我按任何一个 NavLinks,我就会进入More
视图
在那里,我想要的是:如果用户按下Cardiologista
,他就会出现“Mateus Neves”这个名字。 但是,我按下Oftalmologista
,就会出现“Vitor Souza”这个名字。
我将首先尝试解决问题中的评论,这可能会导致答案。
如果您单击“热门付费应用”,将显示 X 个应用。 如果您点击“Top Free Apps”,则会显示 Y 个应用程序
这是一个支持该 UI 的结构
allApps (a collection)
app_0 (a document)
app_type = "Free"
app_1
app_type = "Paid"
如您所见,如果用户单击免费应用程序,则会针对app_type isEqual(to: "Free")
为app_type isEqual(to: "Free")
所有文档对 Firestore 运行查询
那么让我们扩展一下。 让我们采用专业类型并将它们存储在一个集合中 - 这将是呈现给用户的列表,可以从中进行选择
specialties
type_0
name: "Cardiologist"
type_1
name: "General"
type_2
name: "Anesthesiologist"
那么医生将被存储在一个单独的集合中
doctors
doctor_0
name: "Dr. Smith"
type: "type_0"
doctor_1
name: "Dr. Jones"
type: "type_1"
doctor_2
name: "Dr. Jenkins"
type: "type_2"
因此,当用户单击列表中的 Cardiologist 时,您知道这是 type_0,然后查询医生节点以查找type isEqual(to: "type_0")
返回 Dr. Smith 的所有文档。
笔记
确保将文档映射到代码中的对象中,该对象将同时包含类型(documentId)作为名称,以便您可以将其用作 tableView 数据源。
class MyType {
var type = "" //the firestore documentId
var name = ""
}
var myTableViewDataSourceArrayOfTypes = [MyType]() //the tableView datasource
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.