【发布时间】:2015-06-26 10:24:14
【问题描述】:
我无法从此函数获得 [UIImage?] 返回。 getDataInBackgroundWithBlock 不允许我设置除Void in 以外的返回值。但是,该块在迭代时确实会添加到iconArray。但是一旦在块之外,数组又是空的。您将在 cmets 下方的代码中看到数组正确打印和未正确打印的位置。
调用确实连接到数据库,所有数据都在流动。它只是返回那个挂断的数组。
class callData {
func queryImages() -> [UIImage?] {
var iconArray: [UIImage?] = []
var query: PFQuery = PFQuery(className: "QuestionMaster")
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in
for object in objects! {
let imageFiles = object["questionImage"] as! PFFile
imageFiles.getDataInBackgroundWithBlock({
(imageData: NSData?, error: NSError?) -> Void in
if (error == nil) {
let image = [UIImage(data: imageData!)]
iconArray += image //adds item to array correctly
}
println(iconArray) //prints correct array here
}) //getDataInBackgroundWithBlock close
println(iconArray) //does not print correct array here
} //for-loop close
}
return iconArray //returns empty array
}
}
【问题讨论】:
-
@Wain 我不同意那个重复,这个问题在另一个异步调用中的 for 循环中有一个异步调用,这将与您提供的链接不同。
-
@milo526,原理相同,但我同意内部循环增加了额外的复杂性。可以说应该提取内部循环...
标签: ios swift for-loop parse-platform return