2016-01-21 20 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可选值。所以你讲的故事并不一致。

如果实际问题是空的结果 - 您将不得不提供有关您的查询的细节以及您为什么期望存在填充结果。