【问题标题】:How to map fields from Firestore documents in Swift如何在 Swift 中映射 Firestore 文档中的字段
【发布时间】:2021-01-27 15:56:01
【问题描述】:

在我的 Firestore 数据库中,我的“收藏夹”是这样存储的:

如何根据 itemActive = true 获取值“S1533”和“S2017”?

这是我拥有的 Swift 代码,但我被困在如何查看 itemActive 然后返回并返回将该字段设置为 true 的值。

db.collection("users").document(userId!).addSnapshotListener { documentSnapshot, error in
        guard let document = documentSnapshot else {
            print("Error fetching document: \(error!)")
            return
        }
        guard let data = document.data() else {
            print("Document data was empty.")
            return
        }
        print(data["favorites"])
    }

【问题讨论】:

    标签: swift firebase google-cloud-firestore


    【解决方案1】:

    映射 Firestore 文档的最简单方法是使用 Codable。 This article 了解基础知识。

    对于您的模型,以下代码应该可以帮助您入门:

    型号

    struct Favourite: Codable, Identifiable {
      var itemActive: Bool
      var itemAdded: Date
    }
    
    struct UserPreference: Codable, Identifiable {
      @DocumentID public var id: String?
      var displayName: String
      var email: String
      var favourites: [Favourite]?
    }
    

    获取数据

    public class UserPreferenceRepository: ObservableObject {
      var db = Firestore.fireStore()
      @Published var userPreferences = [UserPreference]()
      private var listenerRegistration: ListenerRegistration?
    
      public func subscribe() {
        if listenerRegistration == nil {
          
          var query = db.collection("users")
          
          listenerRegistration = 
            query.addSnapshotListener { [weak self] (querySnapshot, error) in
              guard let documents = querySnapshot?.documents else {
                self?.logger.debug("No documents")
                return
              }
              
              self?.userPreferences = documents.compactMap { queryDocumentSnapshot in
                try? queryDocumentSnapshot.data(as: UserPreference.self)
              }
            }
        }
      }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      相关资源
      最近更新 更多