swift:我无法从函数返回值

时间:2015-11-20 19:57:37

标签: ios swift parse-platform func

我在这里一直在努力解决这个问题: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
}

3 个答案:

答案 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,但它返回queryPFQuery。我想你想回归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