我在这里一直在努力解决这个问题:P我希望有人可以帮助我。
所以我的函数从parse中检索某种数据(double)。 问题是我无法返回mark的值。
这是更新代码后我的错误图片:http://i.stack.imgur.com/UVeQG.png 提前谢谢
func monday() -> Double{
let student:PFObject = currentObject!
let name:String = (student["student_name"] as? String)!
let query = PFQuery(className: "progress")
query.whereKey("student", equalTo: name)
query.skip = 4
query.getFirstObjectInBackgroundWithBlock{
(objects , error) -> Void in
if error == nil {
let mark = objects?.objectForKey("average") as! Double
print(mark)
// i want to return the value of -> mark
}
}
return query // error here : cannot convert return expression of type PFQuery to return type Double
}
答案 0 :(得分:1)
这是我怎么做的
func monday(completionHandler: (Double) -> Void){
let student:PFObject = currentObject!
let name:String = (student["student_name"] as? String)!
let query = PFQuery(className: "progress")
query.whereKey("student", equalTo: name)
query.skip = 4
query.getFirstObjectInBackgroundWithBlock{
(objects , error) -> Void in
if error == nil {
let mark = objects?.objectForKey("average") as! Double
completionHandler(mark)
// i want to return the value of -> mark
}
}
}
然后当您尝试使用该功能时:
var markvalue: Double!
monday(completionHandler: {mark in
print(mark)
//edit: if you want to set mark as a variable
markvalue = mark
})
答案 1 :(得分:0)
该函数应返回Double
,但它返回query
,PFQuery
。我想你想回归mark
。
更新:哦,我现在看到:mark
在块内,可能是在此函数返回后执行的。你将不得不重新考虑你这样做的方式。在不了解代码如何工作的情况下,很难知道处理它的最佳方法。
答案 2 :(得分:0)
首先PFQuery
不是Double
。但是你的主要问题是你的函数在执行闭包的主体之前结束并返回一些值。您不需要此函数的return
值。你需要调用一些mark
值的其他函数,需要在闭包中使用它,如下所示:
query.getFirstObjectInBackgroundWithBlock{ (objects , error) -> Void in
if error == nil {
let mark = objects?.objectForKey("average") as! Double
// Here call other function
self.someFunc(mark)
}
}
修改强>:
在apdate之后,您的代码可能如下所示:
func monday() {
let student:PFObject = currentObject!
let name:String = (student["student_name"] as? String)!
let query = PFQuery(className: "progress")
query.whereKey("student", equalTo: name)
query.skip = 4
query.getFirstObjectInBackgroundWithBlock{
(objects , error) -> Void in
if error == nil {
let mark = objects?.objectForKey("average") as! Double
self.test(mark)
}
}
}
func test(value: Double) {
// Here you work with mark value
}
您无需从所有此功能返回值。您需要在致电monday
后转移代码并将其中的值(在当前代码中)返回test