2016-01-20 65 views
0

我正在查看解析文檔,並且有一個有趣的功能,我想用來驗證註冊用戶,如果用戶名和電子郵件提供了註冊(採取)或不。該文件提供了示例以下:Swift解析 - 使用PFQuery或QueryWithSubqueries函數

var lotsOfWins = PFQuery(className:"Player") 
lotsOfWins.whereKey("wins", greaterThan:150) 

var fewWins = PFQuery(className:"Player") 
fewWins.whereKey("wins", lessThan:5) 

var query = PFQuery.orQueryWithSubqueries([lotsOfWins, fewWins]) 
query.findObjectsInBackgroundWithBlock { 
    (results: [PFObject]?, error: NSError?) -> Void in 
    if error == nil { 
    // results contains players with lots of wins or only a few wins. 
    } 
} 

我對它的版本是:

/*Check username and email not taken*/ 
     let usernameInputCheck = PFQuery(className:"_User") 
     usernameInputCheck.whereKey("appUsername", equalTo: self.usernameTxtField.text!) 

     let emailInputCheck = PFQuery(className:"_User") 
     emailInputCheck.whereKey("email", equalTo:self.emailTxtField.text!) 

     let query = PFQuery.orQueryWithSubqueries([usernameInputCheck, emailInputCheck]) 
     query.findObjectsInBackgroundWithBlock { 
      (results: [PFObject]?, error: NSError?) -> Void in 
      if error == nil { 
       // results contains players with lots of wins or only a few wins. 
      } 
     } 

我希望能夠檢查電子郵件或用戶名取,如果是設置一個標誌,以便我可以給用戶設置信息,例如:「提供的電子郵件已經註冊」或「用戶名不可用,請嘗試不同的信息」。

感謝您的幫助提前。

更新:這裏是爲了解析文檔的鏈接:https://parse.com/docs/ios/guide#queries-compound-queries

回答

2

下面是一些Objective-C的,做的伎倆,這你可以輕鬆地適應斯威夫特。

PFQuery * nameQuery = [PFQuery queryWithClassName:@"user"] 
[nameQuery whereKey:"username" equalTo:username]; 
PFQuery * emailQuery = [PFQuery queryWithClassName:@"user"]; 
[emailQuery whereKey:"email" equalTo:email]; 


PFQuery * query = [PFQuery orQueryWithSubqueries:@[nameQuery, emailQuery] 

     [query countObjectsInBackgroundWithBlock:^(int number, NSError *error) { 
      if(number > 0) { 
      //Email address OR username is already in use. 
     } 
     }]; 
+0

是的,這將檢查電子郵件是否被採取,但我所要求的是檢查電子郵件和用戶名(或兩者)是否都被採用。鑑於我的用戶名列是自定義的(不是由Parse處理的默認用戶名),這種方法將導致兩個查詢分別檢查用戶名和電子郵件。 –

+0

檢查我剛剛做的編輯。 您可以簡單地將多個whereKey/equalTo添加到查詢中。 – StevenOjo

+0

確實可以,但是您怎麼知道要向用戶展示什麼消息(使用用戶名或發送電子郵件)?我已經使用上面發佈的代碼解決了這個問題,並且有一個返回int和基於值的函數,我知道它是用戶名或者電子郵件。然後我設置消息並顯示給用戶。我真的很感謝你,雖然你正在努力幫助:) –

0

變通方法問題:

讓usernameInputCheck = PFQuery(類名: 「_用戶」) usernameInputCheck.whereKey( 「appUsername」,equalTo:self.usernameTxtField.text)

let emailInputCheck = PFQuery(className:"_User") 
    emailInputCheck.whereKey("email", equalTo:self.emailTxtField.text!) 

    let query = PFQuery.orQueryWithSubqueries([usernameInputCheck, emailInputCheck]) 
    query.findObjectsInBackgroundWithBlock { 
     (results: [PFObject]?, error: NSError?) -> Void in 
     if error == nil { 
      let checkResult = self.emailOrUsernameIsTaken(results!) 
      if(checkResult != 0 && checkResult == 1) 
      { 
       //username taken 
      }else if (checkResult != 0 && checkResult == 2){ 
       //email taken 
      } 
     } 
    } 

這裏是功能:

func emailOrUsernameIsTaken(results: [PFObject])->Int 
    { 
     /*Check if username is taken or if email is taken*/ 

     var preferenceTaken: Int = 0 

     if(results[0]["email"] as! String != "" && results[0]["email"] as! String == self.userObject.email!) 
     { 
      preferenceTaken = 1 
     }else if(results[0]["appUsername"] as! String != "" && results[0]["appUsername"] as! String == self.userObject.username!){ 
      preferenceTaken = 2 
     } 

     return preferenceTaken 
    }