Настройка вложенных структур и заполнение через FireStore [Swift] - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть две структуры, одна вложенная в другую:

 struct User {
    let uid: String
    let name: String
    var pack: [Doggo]
 }

 struct Doggo {
   let dogUid: String
   let dogName: String
   let dogBreed: String
   let dogBorn: String
   let dogProfileImageURL: String
 }

Является ли следующий код правильным способом доступа к данным базы данных для каждого?

guard let userUid = Auth.auth().currentUser?.uid else { return }

    let userRef = self.db.collection("users").document(userUid)
    let packRef = self.db.collection("users").document(userUid).collection("pack")
    userRef.getDocument { (document, error) in
        if let document = document, document.exists {
            let data = document.data()
            let name = data?["name"] as? String ?? "Anonymous"
            packRef.getDocuments(completion: { (snapshot, error) in
                if let err = error {
                    debugPrint("Error fetchings docs: \(err)")
                } else {
                    guard let snap = snapshot else { return }
                    for document in snap.documents {
                        let data = document.data()
                        let dogUid = data["dogUid"] as? String ?? "No dogUid"
                        let dogName = data["dogName"] as? String ?? "No dogName"
                        let dogBreed = data["dogBreed"] as? String ?? "No dogBreed"
                        let dogBorn = data["dogBorn"] as? String ?? "No dogBorn"
                        let dogProfileImageURL = data["dogProfileImageURL"] as? String ?? "No dogProfileImageURL"

                        let newDoggo = Doggo(dogUid: dogUid, dogName: dogName, dogBreed: dogBreed, dogBorn: dogBorn, dogProfileImageURL: dogProfileImageURL)
                        self.doggos.append(newDoggo)
                        print(newDoggo)
                    }
                }

                self.user = User(uid: userUid, name: name, pack: self.doggos)
                print(self.user)
                self.configureHomeController()
                self.configureMenuController()
            })

        } else {
            print("Document does not exist")
        }
    }

работать так, как мне хотелось бы, но я не хочу сталкиваться с проблемами в дальнейшем, поскольку это довольно фундаментально для остальной части приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...