2015-09-07 34 views
-3

以下函数返回PFObjects的数组。我遇到的问题是,当函数到达返回点时,for object in object循环尚未完成,因此函数返回一个空数组。仅当数组的提取循环完成后才返回的函数

有没有办法只在循环完成和PF数组填充后才返回?

func getSelectedPosts() -> [PFObject] { 

    println("RUN GET SH") 

    var fetchResults = [PFObject]() 

    var user = PFUser.currentUser()! 
    var relation = user.relationForKey("followingPosts") 
    var query = relation.query() 
    query?.findObjectsInBackgroundWithBlock({ (object: [AnyObject]?, error: NSError?) -> Void in 
     if error == nil 
     { 
      for object in object! 
      { 
       fetchResults.append(object as! PFObject) 
      } 
      // NEED TO RETURN HERE, THAT IS WHEN THE LOOP IS DONE AND THE ARRAY POPULATED 
     } 
     else 
     { 
     // ERROR 
     } 
    }) 

    return fetchResults 
} 
+0

你换的是将对应于该封闭 – yshilov

+0

回报不会是闭包内的认可。此外,该关闭是PFQuery的强制性部分,如果这是您的意思,我无法更改。不知道我是否正确理解您的建议。 – GuiSoySauce

+0

向下投票 - 我渴望了解更多为什么这个问题会被拒绝投票,并且避免在未来提出类似问题的错误。任何指导将非常受欢迎。 – GuiSoySauce

回答

1

继umakanta建议和关闭解释here我能得到它的工作,我打算与关闭。

功能

func getSelectedPosts(result: (object: [PFObject]?, error: NSError? -> Void){ 
     println("RUN GET SH") 

     var fetchResults = [PFObject]() 
     var err = NSError() 

     var user = PFUser.currentUser()! 
     var relation = user.relationForKey("followingPosts") 
     var query = relation.query() 
     query?.findObjectsInBackgroundWithBlock({ (object: [AnyObject]?, error: NSError?) -> Void in 
      if error == nil 
      { 
       for object in object! 
       { 
        fetchResults.append(object as! PFObject) 
       } 
       result(object: fetchResults, error: nil) 
      } 
      else 
      { 
       println("ERROR - getSelectedPosts \(error)") 
       result(object: nil, error: error) 
      } 
     }) 
    } 

函数调用

 getSelectedPosts { (object) -> Void in 
      if error != nil 
      { 
       // deal with error 
      } 
      else 
      { 
       // use fetched object 
      } 
     }