2015-09-07 32 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 
      } 
     }