代码之家  ›  专栏  ›  技术社区  ›  user8295647

函数不会调用Swift 3

  •  0
  • user8295647  · 技术社区  · 9 年前
    @IBAction func signup(_ sender: Any) {
    
        print("began signup process")
    
        guard let fullname = fullnameField.text, fullname != "" else {
            print("FULLNAME field is empty")
            return
        }
    
        guard let username = usernameField.text, username != "" else {
            print("USERNAME field is empty")
            return
        }
    
        guard let email = emailField.text, email != "" else {
            print("EMAIL field is empty")
            return
        }
    
        guard let password = passwordField.text, password != "" else {
            print("PASSWORD field is empty")
            return
        }
    
        print("all fields good")
    
        mainActivityIndicator.startAnimating()
    
        self.checkUsernameAvailability(username: username, completion: {
            result in
            print("starting check")
            ...
        })
    
    
        print("finished the function")
    }
    

    控制台如下所示:

    began signup process
    all fields good
    finished the function
    

    它不会在函数内部打印“开始检查”或运行任何代码。 以后谢谢。

    P、 S我检查了整个控制台,没有与此相关的错误。

    编辑:这是函数内部的代码

    func checkUsernameAvailability(username: String, completion: @escaping (Bool) -> Void) {
        _ = Database.database().reference().child("usernames").observe(.childAdded, with: {
            snapshot in
    
            print("checking username availability")
            print(snapshot)
    
            completion(true)
    
            let dict = snapshot.value as? [String: AnyObject]
            for handled in (dict?.values)! {
    
                print("stumbled")
                print(handled)
                if username.lowercased() == handled.lowercased {
                    completion(false)
                }
            }
        })
    }
    

    和

    self.checkUsernameAvailability(username: username, completion: {
            result in
    
            print("starting check")
    
            if result == false {
                print("username is taken")
                self.mainActivityIndicator.stopAnimating()
                return
            } else {
    
                Auth.auth().createUser(withEmail: email, password: password, completion: {
                    (user, error) in
    
                    if error != nil {
                        print(error ?? "ERROR OCCURED")
                        self.mainActivityIndicator.stopAnimating()
                        return
                    }
    
                    let ref = Database.database().reference()
                    ref.child("~/users/\(user?.uid ?? "0")/username").setValue(username.lowercased())
                    ref.child("~/users/\(user?.uid ?? "0")/fullname").setValue(fullname)
                    ref.child("usernames/\(user?.uid ?? "0")").setValue(username.lowercased())
    
                    self.mainActivityIndicator.stopAnimating()
                })
    
            }
        })
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   Mecki    9 年前

    Database.database().reference().child("usernames").observe 简单地说,不要打电话给 with .childAdded 观察到,但我没有看到会添加子级的代码。对我来说,这看起来像是在设置一个异步观察器,因此在进行调用时,此代码不会运行,它将在监视的事件发生时运行。