-1

嗨,我正在定制 Parse PFLogInViewController,以便通过首先检查用户名是否已经存在,logInButton 实际上将用作注册和登录按钮。如果没有,则将创建用户。如果是这样,那么用户将登录。我正在尝试运行此查询并检查 shouldBeginLogInWithUsername 函数内部,但我认为由于异步查询我遇到了麻烦。我一直试图弄清楚几个小时没有运气。这是我的代码:

func logInViewController(logInController: PFLogInViewController, shouldBeginLogInWithUsername username: String, password: String) -> Bool {

    var bool = false

    var query = PFUser.query()
    query!.whereKey("username", equalTo: username)

    query?.findObjectsInBackgroundWithBlock({ (users, error) -> Void in

        if let users = users {

            if users.count == 0 {

                var user = PFUser()
                user.username = username
                user.password = password
                user.signUpInBackground()

            } else {

                return bool = true

            }

        } else {

            return bool = true

        }

    })

    return bool

}

如您所见,如果用户名存在并且用户需要登录,我需要我的布尔变量 bool 从 false 更改为 true。我只是不知道如何绕过异步请求。

任何帮助将非常感激!

4

1 回答 1

0

由于调用是异步的,您不能期望能够直接从您的函数返回 true 或 false。您需要将闭包传递给函数,该函数将在异步操作完成时调用。有点像这样(这完全未经测试,但希望你明白):

func logInViewController(logInController: PFLogInViewController, shouldBeginLogInWithUsername username: String, password: String, callback: (usernameExists : Bool) -> Void) -> Void {
    var query = PFUser.query()
    query!.whereKey("username", equalTo: username)

    query?.findObjectsInBackgroundWithBlock({ (users, error) -> Void in
        if let users = users {
            if users.count == 0 {
               var user = PFUser()
               user.username = username
               user.password = password
               user.signUp()
               callback(usernameExists: false)
            } else {
               callback(usernameExists: true)
            }
        } else {
           callback(usernameExists: false)
        }
    })
}

像这样使用它,有点:

logInViewController(viewController, shouldBeginLogInWithUsername: "", password: "", callback: { (usernameExists) -> Void in
   //Do your login logic here
   if (usernameExists) {

   } else {

   }
})
于 2015-12-06T11:51:05.513 回答