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) } } 温度=最终温度 } ,失败:{中有错误 打印(错误) }) 返回温度 }
大家好,我是swift的新手,我一直在尝试从这个成功的处理程序中获取价值,但似乎什么都不起作用。在闭包内,我可以打印我想要的数组 最后,我尝试返回数组final,并附加所有产品名称 它应该返回的内容: [“可口可乐减肥套餐+”、“Zero Sixer”、“加糖可乐减肥套餐”、“可口可乐减肥套餐”、“可口可乐减肥套餐”、“可口可乐减肥樱桃”、“柠檬可乐减肥套餐”、“可口可乐减肥双包”、“可口可乐香草”、“可口可乐减肥套餐”、“柠檬可乐减肥套餐”、“无咖啡因可乐减肥套餐”、“柠檬可乐减肥套餐”、“可口可乐”、“无咖啡因可乐减肥套餐”、“柠檬可乐减肥套餐”,“喷泉糖浆饮食”、“可乐饮食”、“柠檬可乐饮食”] 它返回的内容: []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”、“加糖可乐减肥套餐”、“可口可乐减肥套餐”、“可口可乐减肥套餐”、“可口可乐减肥樱桃”、“柠檬可乐减肥套餐”、“可口可乐减肥双包”、“可口可乐香草”、“可口可乐减肥套餐”、“柠檬可乐减肥套餐”、“无咖啡因可乐减肥套餐”、“柠檬可乐减肥套餐”、“可
任何建议都将是惊人的 你不能那样回来。你必须使用闭包
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
}