如果将全局变量的值设置为等于函数中的返回值,如何更新全局变量的值?
当我稍后调用全局变量时,我得到我最初设置它的值,而不是函数生成的乐趣。
如何更新我的全局变量以反映函数中更改的值?
我的代码:
var itemImages10 = [Int: UIImage]()
var myImages: [UIImage] = []
func viewDidLoad() {
var query = PFQuery(className: "Items")
query.orderByDescending("createdAt")
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
let imageObjects = objects as! [PFObject]
for (index, object) in enumerate(imageObjects) {
if let thumbnail1 = object["image1"] as? PFFile {
thumbnail1.getDataInBackgroundWithBlock{(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
if let image = UIImage(data: imageData!) {
self.itemImages10[index] = image
myImages = itemImages10.values.array
}
}
}
}
}
println(myImages) // returns empty array
答案 0 :(得分:1)
这种情况正在发生,因为您要求在字典仍在其他线程中填充时打印字典。当您使用findObjectsInBackground时,闭包内的代码可以在不同的线程中执行。
//更新
你正在嵌套两个后台线程方法,然后尝试访问你在最里面的一个中设置的变量 - 在一个函数中执行的语句按顺序执行,当一个闭包使用它里面的代码时可以在调用它的函数中的其他语句之后执行。 println(myImages)在闭包中的代码完成之前被调用。
//更新2 - 在闭包
中添加了显示print语句的代码 var itemImages10 = [Int: UIImage]()
var myImages: [UIImage] = []
func viewDidLoad() {
var query = PFQuery(className: "Items")
query.orderByDescending("createdAt")
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
let imageObjects = objects as! [PFObject]
for (index, object) in enumerate(imageObjects) {
if let thumbnail1 = object["image1"] as? PFFile {
thumbnail1.getDataInBackgroundWithBlock{(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
if let image = UIImage(data: imageData!) {
self.itemImages10[index] = image
myImages = itemImages10.values.array
println(myImages) // Here, inside the closure
}
}
}
}
}