Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios OAuthSwift闭包捕获值不工作 func queryProducts()->数组{ var final=[String]() var temp=[String]() self.oauthswift.client.get(“http://api.v3.factual.com/t/products-cpg?q=coke", 成功:{ (数据、响应)在 让dataString=NSString(数据:数据,编码:NSUTF8StringEncoding) 让json=json(数据:数据) 如果json[“状态”]。stringValue==“确定”{ //我们可以解析了! 对于json[“响应”][“数据”]中的结果。arrayValue{ final.append(结果[“产品名称”].stringValue) } } 温度=最终温度 } ,失败:{中有错误 打印(错误) }) 返回温度 }_Ios_Swift_Oauth_Closures_Handler - Fatal编程技术网

Ios OAuthSwift闭包捕获值不工作 func queryProducts()->数组{ var final=[String]() var temp=[String]() self.oauthswift.client.get(“http://api.v3.factual.com/t/products-cpg?q=coke", 成功:{ (数据、响应)在 让dataString=NSString(数据:数据,编码:NSUTF8StringEncoding) 让json=json(数据:数据) 如果json[“状态”]。stringValue==“确定”{ //我们可以解析了! 对于json[“响应”][“数据”]中的结果。arrayValue{ final.append(结果[“产品名称”].stringValue) } } 温度=最终温度 } ,失败:{中有错误 打印(错误) }) 返回温度 }

Ios OAuthSwift闭包捕获值不工作 func queryProducts()->数组{ var final=[String]() var temp=[String]() self.oauthswift.client.get(“http://api.v3.factual.com/t/products-cpg?q=coke", 成功:{ (数据、响应)在 让dataString=NSString(数据:数据,编码:NSUTF8StringEncoding) 让json=json(数据:数据) 如果json[“状态”]。stringValue==“确定”{ //我们可以解析了! 对于json[“响应”][“数据”]中的结果。arrayValue{ final.append(结果[“产品名称”].stringValue) } } 温度=最终温度 } ,失败:{中有错误 打印(错误) }) 返回温度 },ios,swift,oauth,closures,handler,Ios,Swift,Oauth,Closures,Handler,大家好,我是swift的新手,我一直在尝试从这个成功的处理程序中获取价值,但似乎什么都不起作用。在闭包内,我可以打印我想要的数组 最后,我尝试返回数组final,并附加所有产品名称 它应该返回的内容: [“可口可乐减肥套餐+”、“Zero Sixer”、“加糖可乐减肥套餐”、“可口可乐减肥套餐”、“可口可乐减肥套餐”、“可口可乐减肥樱桃”、“柠檬可乐减肥套餐”、“可口可乐减肥双包”、“可口可乐香草”、“可口可乐减肥套餐”、“柠檬可乐减肥套餐”、“无咖啡因可乐减肥套餐”、“柠檬可乐减肥套餐”、“可

大家好,我是swift的新手,我一直在尝试从这个成功的处理程序中获取价值,但似乎什么都不起作用。在闭包内,我可以打印我想要的数组

最后,我尝试返回数组final,并附加所有产品名称

它应该返回的内容: [“可口可乐减肥套餐+”、“Zero Sixer”、“加糖可乐减肥套餐”、“可口可乐减肥套餐”、“可口可乐减肥套餐”、“可口可乐减肥樱桃”、“柠檬可乐减肥套餐”、“可口可乐减肥双包”、“可口可乐香草”、“可口可乐减肥套餐”、“柠檬可乐减肥套餐”、“无咖啡因可乐减肥套餐”、“柠檬可乐减肥套餐”、“可口可乐”、“无咖啡因可乐减肥套餐”、“柠檬可乐减肥套餐”,“喷泉糖浆饮食”、“可乐饮食”、“柠檬可乐饮食”]

它返回的内容: []


任何建议都将是惊人的

你不能那样回来。你必须使用闭包

func queryProducts() -> Array<String> {
var final = [String]()
var temp  = [String]()
self.oauthswift.client.get("http://api.v3.factual.com/t/products-cpg?q=coke",
    success: {
        (data, response) in
        let dataString = NSString(data: data, encoding: NSUTF8StringEncoding)
        let json = JSON(data: data)


        if json["status"].stringValue == "ok" {
            // we're OK to parse!
            for result in json["response"]["data"].arrayValue {
                final.append(result["product_name"].stringValue)

            }

        }
          temp = final

    }

    , failure: { error in
        print(error)
    })


return temp

}
然后你可以像这样打电话:

    func queryProducts(successCallback: ([String])->Void) {
        var final = [String]()
        var temp  = [String]()
        self.oauthswift.client.get("http://api.v3.factual.com/t/products-cpg?q=coke",
            success: {
                (data, response) in
                let dataString = NSString(data: data, encoding: NSUTF8StringEncoding)
                let json = JSON(data: data)


                if json["status"].stringValue == "ok" {
                    // we're OK to parse!
                    for result in json["response"]["data"].arrayValue {
                        final.append(result["product_name"].stringValue)

                    }

                }
                temp = final
                successCallback(temp) // callback here

            }

            , failure: { error in
                print(error)
            })

     }

您必须了解:闭包在另一个线程中运行。因此,
return temp
行将在
closure
run中的代码之前运行。因此,请参见下面的anhtu的答案,并使用这种方式。我只是解释我们为什么要这么做。
queryProducts() {
    arrayProducts in
    // doing something, arrayProduct is temp array
}