Firebase Firestore iOS Несколько моделей - PullRequest
0 голосов
/ 04 мая 2020

Я новичок в Firestore и пытаюсь найти примеры проектов с несколькими слоями на iOS. Я хочу использовать все, что может предложить Firestore.

У меня есть пользовательская настройка, которая отображает тесты для пользователя. (Все работает отлично) Теперь я хочу построить свою структуру Викторины. Объект викторины, который имеет вопросы, и эти вопросы имеют ответы.

Я выстроил его до определенного уровня, но он кажется хакерским. Кто-нибудь может поделиться своими лучшими практическими знаниями со мной? Это будет с благодарностью.

Работа на данный момент:

Формат Firestore:"/ quizzes / idone / questions / idtwo / questions"

struct Quiz: Codable, Identifiable {
  @DocumentID var id: String?
  var title: String
  var score: Int?
  var completed: Bool
  @ServerTimestamp var createdTime: Timestamp?
  var userId: String?
  var questions: [Question]?
}

struct Question: Codable, Identifiable {
  @DocumentID var id: String?
  var title: String?
  var completed: Bool?
  //TODO: Answers
}

    do {
      var userQuiz = quiz
      userQuiz.userId = self.userId
        let questionOne = Question(title: "What day is it today?",
                                 imageName: "test.jpeg",
                                 completed: false)
        let questioTwo = Question(title: "What is the meaning of life?",
                                 imageName: "test.jpeg",
                                 completed: false)
      let _ = try db
            .collection("quizzes").addDocument(from: userQuiz) // Works perfect
            .collection("questions").addDocument(from: questionOne) // Here is the issue I can't add multiple questions.
    }
    catch {
      fatalError("Unable to encode quiz: \(error.localizedDescription).")
    }

  private func loadData() {
    if listenerRegistration != nil {
      listenerRegistration?.remove()
    }
    listenerRegistration = db.collection(quizzesPath)
      .whereField("userId", isEqualTo: self.userId)
      .order(by: "createdTime")
      .addSnapshotListener { (querySnapshot, error) in
        if let querySnapshot = querySnapshot {
          self.quizzes = querySnapshot.documents.compactMap { document -> Quiz? in
            try? document.data(as: Quiz.self)
          }
          //Todo: This is the main part I have a issue at. How do I consume my questions and mapp them to quizzes
          let questions = querySnapshot.documents.compactMap { document -> [Question]? in
            try? document.data(as: [Question].self)
          }
          //self.quizzes.questions = questions
        }
      }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...