Swift – parsing – 检查用户名是否被使用

我试图创build一个函数,将用户名作为参数,并检查是否采用该用户名(通过与Parse数据库中的其他PFUser进行比较。该函数在我的视图控制器类中)(我知道有类似的这个问题,但他们不提供高质量的答案,比这更一般或不在斯威夫特)。

func usernameIsTaken(username: String) -> Bool { //bool to see if username is taken var isTaken: Bool = false //access PFUsers var query : PFQuery = PFUser.query()! query.whereKey("User", equalTo: username) query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) in if error == nil { if (objects!.count > 0){ isTaken = true println("username is taken") } else { println("Username is available. ") } } else { println("error") } } return isTaken } 

问题在于,if语句中的条件总是为false,所以即使用户名被占用,“用户名可用”也始终在控制台中打印。即使用户名被占用,也不会打印“用户名”。 我应该在嵌套的if语句中检查用户名是否与另一个PFUser相匹配?

您正在查询User (类)密钥,但是您需要查询特定的密钥,例如email

 // First get user's inputted email let enteredEmailAddress = "sample@gmail.com" // Then query and compare var query = PFQuery(className: "_User") query.whereKey("email", equalTo: enteredEmailAddress) query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) in if error == nil { if (objects!.count > 0){ isTaken = true println("username is taken") } else { println("Username is available. ") } } else { println("error") } } 

只是以为我会把它扔到那里,因为以前我也回答过类似的问题 ,所以这个问题似乎并不为人所知。 Parse会自动执行这种types的用户类检查。 如果你正在尝试创build一个新的用户,其中包含用户名,电子邮件等重复的默认字段,那么Parse将不允许用户注册。 这是自动完成的,除了出现错误,用户知道他们为什么不能成功注册,你不得不做任何事情。 一个签名用户的例子,检查用户名电子邮件等重复如下:

 user.signUpInBackgroundWithBlock { (succeeded: Bool, signupError: NSError?) -> Void in if signupError == nil { //present new controller println("Signed up") } else { if let errorString = signupError!.userInfo?["error"] as? NSString { error = errorString as String } else { error = "We're sorry, an error ocured! Please try again." } self.displayAlert("Could not sign up", error: error) } } } 

检查错误代码。 上次我这样做,代码202 =用户名,代码203 =电子邮件采取。

  if signupError == nil { print("User \(user.username!) signed up OK!") } else if signupError?.code == 202 { print("Username taken. Please select another") } else if signupError?.code == 203 { print("e-Mail taken. Please select another") }