[英]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.