Чтобы зарегистрироваться, нужно дважды нажать кнопку регистрации.

Передача args для файла dockerfile, а затем связанная с ним по переменной TARGETOS.

CMD:

export TARGETOS=windowsservercore-1803
docker-compose build

docker-compose.yml:

f2]

Файл докеров:

ARG TARGETOS
ENV TARGETOS ${TARGETOS}

# do things based on TARGETOS arg
# RUN if [ ${TARGETOS} = "windowsservercore-1803" ]; then \
-1
задан BlueBear 19 January 2019 в 18:54
поделиться

1 ответ

Ну, я пытался добавить кое-что в ваш код, но это немного сложно для чтения. Вы должны действительно подумать о рефакторинге.

В любом случае, проблема в том, что вы никогда не ждете, пока результат запроса вернется, и просто даете ему выполнить. Помните, что Firebase является асинхронным. В вашем случае я предлагаю вам использовать блок завершения для метода isValidUsername. Вот код для вас. Не уверен, что он будет работать, поскольку я не могу скомпилировать без создания всех компонентов пользовательского интерфейса, которые у вас есть. В приведенном ниже коде я удалил кучу вашего кода, который изменяет пользовательский интерфейс, если он не проверен. Я также удалил ваши проверенные переменные, так как в этом случае они вам больше не понадобятся. Я прокомментировал весь код, который я добавил, чтобы вам было легче его понять.

@IBAction func onSignUp(_ sender: Any) {

        print("Sign Up pressed")
        guard let email = emailTextField.text else { return }
        guard let password = passwordTextField.text else { return }
        guard let userName = usernameTextField.text else { return }

        if isValidEmail(email: email) && isValidPassword(password: password) {
            // HERE YOU USE THE CLOSURE
            isValidUsername(username: userName) { (verified, error) in
                if error != nil {
                    // IF THERE IS ERROR RETURN
                    return
                }
                guard let verified = verified else { return }
                // IF IT IS A VALID USERNAME, PROCEED WITH SIGNUP
                if verified {
                    Auth.auth().createUser(withEmail: email, password: password) { (authResult, error) in
                        if error != nil {
                            return
                        }

                        guard let user = authResult?.user else {
                            return
                        }

                        //Successfully Authenticated User
                        let ref = Database.database().reference(fromURL: "https://heytest.firebaseio.com/")
                        let usersReference = ref.child("users").child(user.uid)
                        let values = ["username": self.usernameTextField.text!, "email": self.emailTextField.text!, "games-played": "0"]
                        usersReference.updateChildValues(values, withCompletionBlock: { (err, ref) in
                            if err != nil {
                                print(err!)
                                return
                            }

                            //Successfully registered user's data to database
                            print("[SIGN UP] - Successfully Signed Up")
                            self.present((self.storyboard?.instantiateViewController(withIdentifier: "TabBarViewController"))!, animated: false, completion: nil)


                        })
                    }
                }
            }
        } else {

        }

    }

    //MARKUP: Validations/Verifications
    //Email Verification (Must follow correct email format: example@gmail.com)
    func isValidEmail(email: String) -> Bool {

        let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
        var valid = NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: email)
        if valid {
            valid = !email.contains("Invalid email id")
        }

        if valid == false {

            return false

        } else {

            return true
        }
    }


    //Password Verification (Must be greater than 8 digits
    func isValidPassword(password: String) -> Bool {

        let passwordRegex = ".{8,}"
        var valid = NSPredicate(format: "SELF MATCHES %@", passwordRegex).evaluate(with: password)

        if valid {
            valid = !password.contains("Invalid password id")
        }

        if valid == false {

            return false

        } else {

            return true
        }
    }

    //Username Verification (Must be between 3-15 charaters w/ username not taken)
    // HERE IS A CLOSURE
    typealias validateClosure = (Bool?, Error?) -> Void
    func isValidUsername(username: String, completion: @escaping validateClosure) {
        let usernameRegex = ".{3,15}"
        var valid = NSPredicate(format: "SELF MATCHES %@", usernameRegex).evaluate(with: username)

        if valid {
            valid = !username.contains("Invalid username id")
        }

        if valid == false {

        } else {
            let ref = Database.database().reference(fromURL: "https://heytest.firebaseio.com/")
            let usernamesRef = ref.child("users")
            usernamesRef.queryOrdered(byChild: "username").queryEqual(toValue: username).observeSingleEvent(of: .value, with: { (snapshot) in
                // if there is data in the snapshot reject the registration else allow it

                if (snapshot.value! is NSNull) {
                    // RETURN TRUE IF VERIFIED
                    completion(true, nil)

                } else {
                    // RETURN FALSE IF NOT VARIFIED
                    completion(false, nil)

                }

            }) { (error) in
                // RETURN FALSE AND THE ERROR
                completion(false, error)
                print(error.localizedDescription)
            }

        }
    }

Надеюсь, это поможет. И, пожалуйста, действительно подумайте о переносе всего кода, который выполняет сетевые вызовы и бизнес-логику, в другой класс и из viewController. Это сделает вашу жизнь намного легче позже.

0
ответ дан Galo Torres Sevilla 19 January 2019 в 18:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: