我试图找出为什么swift返回我在函数开头声明的0,而不是返回我从Parse设置它的数字。
func getPhotosSubmitted(quest: String) -> Int{
var num = 0
var query = PFQuery(className:"Quest")
query.whereKey("questName", equalTo:quest)
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil {
// The find succeeded.
// NSLog("Successfully retrieved \(objects.count) scores.")
// Do something with the found objects
for object in objects {
num = (object["numOfSubmittedPhotos"] as Int)
println("---\(num)")
}
} else {
// Log details of the failure
//NSLog("Error: %@ %@", error, error.userInfo!)
}
}
return num
}
此func每次都会返回0,就像它不等待:num = (object["numOfSubmittedPhotos"] as Int)
当我尝试返回(object["numOfSubmittedPhotos"] as Int)
时,它会抛出一个错误,指出Int不能转换为void
我打印一个测试行,看看我从Parse获得了什么值,它是不是0的正确值。有没有人在这段代码中看到问题?
答案 0 :(得分:0)
query.findObjects ...创建一个将永远运行的块。在那之后,你返回num。现在就发生了。
由于getNumberOfPhotos想要返回一个仅在将来可用的值,因此它也必须是异步调用。这意味着返回必须是要在将来执行的块或类似的东西。
正如有人所说,花一天时间阅读iOS中的异步,专注于块而不是其他方法。