#ios #swift #firebase #google-cloud-firestore
#iOS #swift #firebase #google-cloud-firestore
Вопрос:
В настоящее время я пытаюсь интегрировать firebase в свое приложение для ios. И одна из функций, над которой я работаю, включает в себя создание данных в cloud firestore для каждого пользователя при регистрации. когда они нажимают «зарегистрироваться» в моем приложении, он создает нового пользователя, используя авторизацию firebase, и я создаю пользовательский документ в своей базе данных в коллекции «user». Но я также хочу добавить вложенную коллекцию для каждого пользователя, когда я создаю пользователя, который будет хранить их «друзей». вот код, в котором я создаю пользовательский документ при нажатии кнопки регистрации. Я использую функцию возврата, чтобы получить ссылку на документ, который я только что создал. Затем я хочу использовать эту ссылку для создания вложенной коллекции после создания документа, то есть при вызове обработчика завершения. Но «usersDocRef» не присваивается значение до тех пор, пока, по-видимому, не будет вызван обработчик завершения. Поэтому я не могу сделать это там. Как мне получить доступ к ссылке на документ в обработчике завершения или иным образом использовать эту ссылку для добавления вложенной коллекции после создания документа? Я пытаюсь избежать запросов на получение ссылки или любых других операций чтения, чтобы быть эффективными (потому что это линейная зависимость от стоимости выставления счетов в firebase land). Любая помощь будет оценена
let userDocRef = self.db.collection(K.FStore.Collections.usersRootCollection).addDocument(data: [K.FStore.Fields.username : email]) { (error) in
if let error = error {
print("Error registering: (error)")
} else {
///want to use userDocRef here (obviously can't, workarounds?)
}
}
Ответ №1:
Объявить userDocRef
как необязательный в предыдущей строке:
var userDocRef: DocumentReference? = nil
userDocRef = self.db.collection(K.FStore.Collections.usersRootCollection).addDocument...
Теперь компилятор Swift позволит вам ссылаться userDocRef
изнутри обработчика завершения.
Комментарии:
1. Простое решение и факт, который я хотел бы знать несколько часов назад, большое вам спасибо!
2. Это в моей книге: apeth.com/swiftBook/ch03.html#_variable_declaration