2016-01-21 19 views
1

我有以下代碼基本上會查詢Parse類並返回結果集。返回結果後,我會將該數組傳遞給函數以檢查是否設置了某些元素。Swift分析 - 方法不會停止執行

我用過的打印語句遍佈代碼嘗試和調試,發現執行查詢和內

if error == nil 

我得到的結果數組是空的。因此,當我傳遞給我下面的函數,它永遠不會出來呢:

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 
    } 

,這是該查詢正在發生的代碼:從上面打印語句

let query = PFQuery.orQueryWithSubqueries([usernameInputCheck, emailInputCheck]) 
     query.findObjectsInBackgroundWithBlock { 
      (results: [PFObject]?, error: NSError?) -> Void in 
      if error == nil { 
       print("Before") 
       let checkResult = self.emailOrUsernameIsTaken(results!) 
       print(results) 
       print("After") 
      } 
     } 

爲輸出,我得到控制檯:

Before 
Optional([]) 
After 

有人可以幫我找出問題。我很驚訝爲什麼這不起作用。

+0

如果'results'爲空,'results [0] [「email」] as!字符串'應該崩潰,因爲你強制解包無可選值。所以你講的故事並不一致。 - 如果問題是空洞的結果 - 你沒有提供任何關於你的查詢的細節,以及你爲什麼期望有一個填充結果。 – Mundi

+0

建立這一點,只是因爲可能沒有錯誤並不能保證結果具有價值。 – pbush25

+0

@Mundi true。我錯誤的假設,我承認。好的,所以在查詢塊中,我將驗證結果不是空的...如果不是空的,那麼執行正文。如果爲空,我會設置一個全局變量並檢查它的塊。如果符合條件,我會執行繼續。如何才能確保在塊完成執行之後塊之後的代碼不會執行? –

回答

4

如果results爲空,results[0]["email"] as! String應該崩潰,因爲您正在強制解包nil可選值。所以你講的故事並不一致。

如果實際問題是空的結果 - 您將不得不提供有關您的查詢的細節以及您爲什麼期望存在填充結果。