#ios #swift #firebase #google-cloud-firestore #segue
#iOS #swift #firebase #google-облако-firestore #segue
Вопрос:
Я изучаю как Swift, так и firebase, создавая приложение. В моем текущем firestore у меня есть база данных с именами игроков коллекции, а внутри коллекции есть документ с идентификатором автоматического документирования и двумя полями, такими как имя и электронная почта. Вот так. изображение firestore
Я также использую Firebase Auth, поэтому всякий раз, когда пользователь создает учетную запись, я помещаю его электронную почту в firestore с именем поля email.
Вот код для RegisterViewController, в котором пользователь регистрирует свою учетную запись с помощью электронной почты и пароля.
import UIKit
import Firebase
class RegisterViewController: UIViewController {
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
let db = Firestore.firestore()
override func viewDidLoad() {
super.viewDidLoad()
}
//MARK: - register a new account
@IBAction func registerPressed(_ sender: UIButton) {
if let email = emailTextField.text, let password = passwordTextField.text {
Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
if error != nil {
// some codes here
} else {
// Add a new document with a generated ID
var ref: DocumentReference? = nil
ref = self.db.collection(K.FStore.playersCollection).addDocument(data: [K.FStore.emailField: email, K.FStore.nameField: ""]) { (error) in
if let err = error {
print("There was an issue storing data to firestore. (err)")
} else {
print("Document added with ID: (ref!.documentID)")
}
}
// pass this data
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == K.registerToHome {
let homeVC = segue.destination as! HomeViewController
homeVC.documentID = ref?.documentID
}
}
self.performSegue(withIdentifier: K.registerToHome, sender: self)
}
}
}
}
}
Я планирую проверить, есть ли у пользователя имя в поле «имя документа» в следующем HomeViewController, поэтому, если значение поля «имя» в документе равно ""
, я хочу отобразить предупреждение с текстовым полем, чтобы пользователь мог добавить свое имя. Однако в HomeViewController мне нужен documentId, потому что я буду использовать этот код, db.collection(K.FStore.playersCollection).document(documentID).getDocument
в HomeVC, поэтому я хочу передать documentId пользователя (в RegisterVC я смог получить значение как ref?.documentID
, поэтому я просто хочу передать значение в HomeVC) в HomeVC. Я пытался использовать func prepare(for segue: UIStoryboardSegue, sender: Any?)
, но мне не удалось передать значение…
Ответ №1:
Измените свой код на :
// Начало определения вашего кода id
:
var id = ""
else {
// Add a new document with a generated ID
var ref: DocumentReference? = nil
ref = self.db.collection(K.FStore.playersCollection).addDocument(data: [K.FStore.emailField: email, K.FStore.nameField: ""]) { (error) in
if let err = error {
print("There was an issue storing data to firestore. (err)")
} else {
print("Document added with ID: (ref!.documentID)")
self.id = ref!.documentID
self.performSegue(withIdentifier: K.registerToHome, sender: self)
}
}
}
// Функция, не прошедшая регистрацию :
// pass this data
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == K.registerToHome {
let homeVC = segue.destination as! HomeViewController
homeVC.documentID = self.id
}
}
Комментарии:
1. Итак, если я помещу функцию prepare вне функции registerPressed, как я могу получить доступ к ref?.documentId?