全局数组仅返回0

时间:2015-04-13 17:29:11

标签: ios xcode swift

我已经实例化了一个名为array的全局数组,并尝试将字典中的值附加到数组中。我已成功将值从字典复制到数组,但它似乎只在本地。我不确定我做错了什么。请帮我搞清楚。这是代码:

class StudentTableViewController: UITableViewController {
var dict = Dictionary<String, String> ()
var array = [Dictionary<String, String>] ()

//学生

override func viewDidLoad() {
     super.viewDidLoad()
     queryData()

}


func queryData ()-> (Int, [Dictionary<String, String>]) {
    var userQuery = PFUser.query()
    //var arr = []
    var count : Int
    count = 0
    userQuery?.whereKey("Type", equalTo:"student")
    userQuery?.findObjectsInBackgroundWithBlock({ (objects: [AnyObject]?, error: NSError?) -> Void in
        for object in objects! {
            self.dict["firstName"] = object["firstName"] as! NSString as String
            self.dict["lastName"] =  object["lastName"] as! NSString as String
            self.dict["contact"] = object["contact"] as! NSString as String
            self.array.append(self.dict)
        }
        println(self.array)
        count = self.array.count
    })

 return(self.array.count, self.array)
// returns 0
// return empty array 
}

这里,self.array.count返回0,但我想返回字典成员的计数,self.array只返回空数组,我希望它返回字典。

我已经坚持了一段时间,我不确定为什么它不想成为全球

由于

1 个答案:

答案 0 :(得分:0)

findObjectsInBackgroundWithBlock是异步的,所以当你的方法返回时,该块甚至还没有运行。相反,您需要使用结果调用块中的某些内容。以下是如何通过传递完成块来执行此操作的示例。

  override func viewDidLoad() {
    super.viewDidLoad()
    queryData {

      // update view
    }
  }


  func queryData(completionHandler: () -> Void) {
    var userQuery = PFUser.query()
    var count : Int
    count = 0
    userQuery?.whereKey("Type", equalTo:"student")
    userQuery?.findObjectsInBackgroundWithBlock({ (objects: [AnyObject]?, error: NSError?) -> Void in
      for object in objects! {
        self.dict["firstName"] = object["firstName"] as! NSString as String
        self.dict["lastName"] =  object["lastName"] as! NSString as String
        self.dict["contact"] = object["contact"] as! NSString as String
        self.array.append(self.dict)
      }
      println(self.array)
      count = self.array.count
      dispatch_async(dispatch_get_main_queue) {
        completion()
      }
    })

    return(self.array.count, self.array)
  }