Невозможно присвоить значение: 'user' является константой 'let' - ИСПРАВЛЕНО - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь создать страницу входа в систему, где пользователь входит в систему с помощью Auth Email / Password, и если они объявлены как admin или user, executeSegue переходит на другую страницу.

Вот мой код:

@IBAction func submit(_ sender: UIButton) {
    if let email = txtemail.text, let passowrd = txtpass.text {
        Auth.auth().signIn(withEmail: email, password: passowrd) { (user, error) in
            Database.database().reference().child("user").child("admin")
            if user = true {
                self.performSegue(withIdentifier: "adminlogin", sender : self)
            }
            if user = false {
                self.performSegue(withIdentifier: "login", sender : self)
            }
        }
    }

Однако продолжает появляться эта ошибка:

Невозможно присвоить значение: 'user' является константой 'let'.*

Я исправил это, выполнив это с моим кодом:

{ Auth.auth().signIn(withEmail: email, password: passowrd) { (user, error) in
            if user != nil {
            let uid = Auth.auth().currentUser?.uid
                Database.database().reference().child("user").child(uid!).child("admin").observeSingleEvent(of: .value, with: { (snapshot) in

                    // Checking if user is found
                    if snapshot.exists() {
                        // admin is found
                        self.performSegue(withIdentifier: "adminlogin", sender : self)
                    } else {
                        // admin is not found going to user login
                        self.performSegue(withIdentifier: "login", sender : self)
                    }
                })

Теперь, когда я вхожу в систему с помощью Admin, я перехожу к другому View Controller, чем если я вхожу с помощью пользователя.

Ответы [ 3 ]

2 голосов
/ 08 марта 2019

= используется в качестве оператора присваивания

== является оператором сравнения

Вы хотите использовать == для сравнения.

Пользователь и объекты ошибок являются неизменными, то есть вы не можете их изменить. Но они содержат значения, которые вы хотите проверить.

Я обновил ваш код для работы:

 @IBAction func submit(_ sender: UIButton) {

    if let email = txtemail.text, let passowrd = txtpass.text

    {
        Auth.auth().signIn(withEmail: email, password: passowrd) { (user, error) in
            Database.database().reference().child("user").child("admin")
            if user == true {
                self.performSegue(withIdentifier: "adminlogin", sender : self)
            }
            if user == false {
                self.performSegue(withIdentifier: "login", sender : self)
            }
        }
    }

}
0 голосов
/ 08 марта 2019

Вы не можете проверить, является ли пользователь администратором или нет, сравнив его с истинным или ложным. Я предлагаю войти в систему и после этого проверить, если UID является администратором, так:

let databaseRef = Database.database().reference(withPath: "user/admin/(UID after logged in)")

databaseRef.observeSingleEvent(of: .value, with: { (snapshot) in

    // Checking if user is found
    if snapshot.exists() {
        // admin is found 
        self.performSegue(withIdentifier: "adminlogin", sender : self)
    } else {
        // admin is not found going to user login
        self.performSegue(withIdentifier: "login", sender : self)
    }
})
0 голосов
/ 08 марта 2019

Вы поставили if user = true Одиночное = - это задание. Чтобы проверить, что значение равно чему-то, используйте if user == true

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