Функция входа в систему Swift-Firebase для аутентификации в рамках презентации, как использовать shouldPerformSegue, чтобы остановить выполнение сеанса? - PullRequest
0 голосов
/ 28 мая 2018

Я хотел использовать сценарий segue (представлен модально), чтобы представить новый контроллер представления, но проверка внутри функции shouldPerform - это функция авторизации Firebase signIn, но поскольку замыкающее замыкание напрямую возвращает компилятор обратно, оно возвращает false, прежде чем функция signIn сможет сделатькакие-либо изменения в флаге.

var shouldPerformSegue = false
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
    guard let email = loginemail.text, let pass = loginpassword.text, email != "", pass != "" else {
        return false
    }
    Auth.auth().signIn(withEmail: email, password: pass) { (result, error) in
        if let error = error{
            TWMessageBarManager().showMessage(withTitle: "invalid email or pass", description: error.localizedDescription, type: .error)
            self.shouldPerformSegue = false

        } else {
        self.shouldPerformSegue = true
        }
    }
    return shouldPerformSegue
}

Моя цель - использовать сеанс раскадровки (особенно нестандартный переход), чтобы решить эту проблему, возможно ли это?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Вот более точный ответ.Здесь я изменил тип @escaping с NSDictionary на (Bool,Error?), так как нам нужно вернуть часы завершения с результатом.

func didUserLoggedInSuccessfully(success:@escaping (Bool, Error?) -> Void)
{
    Auth.auth().signIn(withEmail: self.emailTextField.text!, password: self.passwordTextField.text!) { (user, error) in
        if error == nil {
            success(true,nil)
        }
        else{
            success(false,error)
        }
    }
}


self.didUserLoggedInSuccessfully { (result,error) in
    if result {
        /// Perform Segue
    }
    else{
        /// Do not Perform
        TWMessageBarManager().showMessage(withTitle: "invalid email or pass", description: error.localizedDescription, type: .error)
    }
}
0 голосов
/ 28 мая 2018

Попробуйте использовать обработчик завершения

func didUserLoggedInSuccessfully(success:@escaping (NSDictionary) -> Void)
    {
        Auth.auth().signIn(withEmail: self.emailTextField.text!, password: self.passwordTextField.text!) { (user, error) in
            if error == nil {
                success(true)
            }
            else{
                //Tells the user that there is an error and then gets firebase to tell them the error
                success(false)
            }
        }
    }

Usgae

self.didUserLoggedInSuccessfully { (success) in
            if success {
                /// Perform Segue
            }
            else{
                /// Do not Perform
            }
        }
...