簡體   English   中英

根據 NavigationLink Text Swift、Cloud Firestore 顯示自定義信息

[英]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 ,但並沒有成功地做到這一點。

有任何想法嗎?

編輯:

圖 1 2 圖 3

[![2][4]][4]

為了澄清我的問題,我添加了有關我目前如何管理數據的屏幕截圖:

我得到了3個NavLinks Home View手風琴集“特色”和上面給出的代碼: CardiologistaCirurgião GeralOftalmoloista

然后,如果我按任何一個 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM