Запись нескольких параметров в Firebase


#1

Всем привет.
начинаю учиться работать с firebase. Возникла следующая проблема:

  1. при регистрации юзера хочу записать несколько значений (параметров UID)

  2. один параметр записывается замечатьно

  3. но когда добавляю код, то записывается только последний параметр! Я не пойму в чём дело?
    Вот код кнопки регистрации:

    @IBAction func singUpButtonAction(_ sender: Any) {

     guard let email = emailTextField.text, let password = passwordTextField.text, email != "", password != "" else {
         displaywarningLabelGLB(warnLabel: warnLabel, withText: "Info is incorrect")
         return
     }
     
     let firstName = firstNameTextField.text
     let secondName = secondNameTextField.text
     
     Auth.auth().createUser(withEmail: email, password: password) { (user, error) in
         guard error == nil, user != nil else {
             print(error!.localizedDescription)
             return
         }
         let userRef = Database.database().reference(withPath: "users").child((user?.user.uid)!)
         userRef.setValue(["email": user?.user.email])
         
         userRef.setValue(["firstName": firstName])
         userRef.setValue(["secondName": secondName])
     }
    

    }

При данном коде записывается только последняя строка “secondName”!
Если закоментить “userRef?.setValue([“secondName”: secondName])”, то запишится в БД только строка “firstName”, игонрируя первую. Ну если закоментить две последнии, то запишется email… Подскажите в чём дело?

PS. Админу: предлагаю создать раздел FireBase! Тема очень интресная, а главное нужная - для начинающего разработчика просто идеальный вариант реализации уже приличных сетевых проектов небольшими силами! На форуме нет ни одного тега firebase!


#2

не уверен, но видимо ты просто пересоздаешь параметры и они записываются поверх друг друга. Ковыряй в сторону создания “словаря параметров”.


#3

Нашёл у себя же банальную ошибку:

userRef.setValue([“email”: user?.user.email])
userRef.setValue([“firstName”: firstName])
userRef.setValue([“secondName”: secondName])

Метод setValue записывает данные массивом (как можно было не заметить :smile: ), поэтому каждый новый вызов этого метода по одному и тому же адресу перезаписывает данные в БД.

Правильная запись банальна: setValue([“email”: user?.user.email, “firstName”: firstName, “secondName”: secondName]) :slight_smile: