我正在尝试创建一个条形码扫描应用程序,该应用程序将允许用户扫描物品的条形码,然后保存该扫描的物品以供以后在程序中使用。该项目将另存为ITEM对象。我正在使用API从条形码UPC中检索商品名称,但是在扫描后,我无法弄清楚如何从完成处理程序中提取商品名称,以将其分配给要在对象中使用的itemName变量。
扫描条形码后,我可以通过API检索商品名称,但是我无法将商品名称保存在变量中,以在完成处理程序之外使用。我可以将其保存在处理程序内部的变量中,但不能在外部使用。
func grabItem(upc:String, completionHandler:@escaping ((String) -> ())){
let url = "https://api.upcdatabase.org/product/" + upc + "/APIKEYPLACEHOLDER"
let urlObj = URL(string:url)
URLSession.shared.dataTask(with: urlObj!) { (data, response, error) in
do {
let parsedData = try JSONSerialization.jsonObject(with: data!) as! [String:Any]
for (key, value) in parsedData {
if( key == "description") {
var itemName = value as! String
completionHandler(itemName)
}
}
}catch{
print("error")
}
}.resume()
}
var itemName:String = "null"
grabItem(upc: "0070847811169") { (item) in
print(item) /// THIS PRINTS OUT THE ITEM NAME CORRECTLY
itemName = item ///SWIFT SHOWS THAT THE ITEM NAME IS INDEED STORED
}
print(itemName) //THE ORIGINAL VALUE "NULL" IS STILL PRINTED