Ios 试图在Swift中将解析中的一行数据提取到数组中

Ios 试图在Swift中将解析中的一行数据提取到数组中,ios,arrays,swift,parse-platform,Ios,Arrays,Swift,Parse Platform,我正试图将数据从解析类拉入我的Swift项目。一般来说,我很挣扎,因为我还在学习,但我至少已经达到了查询成功执行并返回结果的程度。问题是数据只存在于通过对象循环的for循环中。尝试向解析对象值追加数组或设置变量失败。任何想法都将不胜感激,谢谢 //Declare variables that should exist outside the query var parseArray : [Double] = Array() //the array to store the results

我正试图将数据从解析类拉入我的Swift项目。一般来说,我很挣扎,因为我还在学习,但我至少已经达到了查询成功执行并返回结果的程度。问题是数据只存在于通过对象循环的for循环中。尝试向解析对象值追加数组或设置变量失败。任何想法都将不胜感激,谢谢

//Declare variables that should exist outside the query
    var parseArray : [Double] = Array() //the array to store the results
    var parseResult1 : Double = Double() //the variable to store one of the data points from the parse class
    let parseResults = PFObject(className:"parseResults")

    //declare query variable and run query
    let parseResultsQuery = PFQuery(className:"parseResults")
    parseResultsQuery.whereKey("username", equalTo: (PFUser.currentUser()?.username)!)
        parseResultsQuery.findObjectsInBackgroundWithBlock {
            (objects, error: NSError?) -> Void in
            if error == nil {
                for object in objects!{ //looping through returned data
                    print("no error in Parse lookup")
                    parseResult1 = object["parseResult1"] as! Double
                    print("Parse result in object loop: \(parseResult1)")
                    parseArray.append(parseResult1)
                }
            } else {
                print(error)
            }
        }
    print("Parse result outside of loop: \(parseResult1)")
    print(parseArray)
parseResult1变量在“for objects in objects”循环(例如7.0)中显示值,但在循环外,该值未存储,显示为0.0。理想情况下,我希望将与用户名键匹配的所有解析值存储在Swift数组中,但此时,我会满足于逐个拉出对象

您有一个闭包:

... findObjectsInBackgroundWithBlock { (objects, error: NSError?) -> Void in...
当您调用它时,程序不会等待它结束,而是进入下一步。 您的对象:

var parseArray : [Double] = Array() //the array to store the results
var parseResult1 : Double = Double() //the variable to store one of the data points from the parse class
let parseResults = PFObject(className:"parseResults")

是it函数的本地对象,当调用闭包体时,您已退出父方法,当您退出闭包体时,本地对象将被销毁,并且不会保存解析数据。您需要创建像global for function这样的对象,其中包含您在此处编写的代码。

将解析逻辑从闭包中取出,并调用私有方法,将objects属性传递给该方法。更好的形式和解决您的问题:

func parseResults(objects: Array<PFOject>){

    for object in objects!{ //looping through returned data
                    print("no error in Parse lookup")
                    parseResult1 = object["parseResult1"] as! Double
                    print("Parse result in object loop: \(parseResult1)")
                    parseArray.append(parseResult1)
    }

}
func解析结果(对象:数组){
对于对象中的对象!{//循环返回数据
打印(“解析查找中无错误”)
parseResult1=对象[“parseResult1”]为!双精度
打印(“对象循环中的分析结果:\(parseResult1)”)
parseArray.append(parseResult1)
}
}
然后在检查错误后在闭包中调用它


注意:未测试的代码-可能需要一些小的调整。

您有一个闭包
findobjectsinbackgroundithblock{(对象,错误:NSError?)->Void in
。当调用它时,程序不会等待它结束并进入下一步。您的
parseResult1
是一个本地对象,当您对闭包体进行缩放时,您已退出paren方法,当您退出闭包体时,本地对象将被销毁,并且不会保存解析数据。您需要创建类似全局的对象对于您在此处编写的函数,没有问题-如果有机会,请接受答案。谢谢!!:)