Swift 方法返回从HTTP请求检索到的值
我有一个执行HTTP请求并从网站检索数据的方法,它按预期工作,我正确地获取了数据。我不能做的是在调用该方法时返回检索到的值 这是代码Swift 方法返回从HTTP请求检索到的值,swift,return,return-value,nsurlsession,Swift,Return,Return Value,Nsurlsession,我有一个执行HTTP请求并从网站检索数据的方法,它按预期工作,我正确地获取了数据。我不能做的是在调用该方法时返回检索到的值 这是代码 func myFunction(zipCode: String)->String{ var myData:String = "" let siteLink = "http://example.com/zip/" + zipCode let url = URL(string: siteLink) let task = URL
func myFunction(zipCode: String)->String{
var myData:String = ""
let siteLink = "http://example.com/zip/" + zipCode
let url = URL(string: siteLink)
let task = URLSession.shared.dataTask(with: url!) { data, response, error in
guard error == nil else {
print(error!)
return
}
guard let data = data else {
print("Data is empty")
return
}
let json = try! JSONSerialization.jsonObject(with: data, options: [])
guard let jsonArray = json as? [[String: String]] else {
return
}
myData = jsonArray[0]["MyPropertyName"]!
// Here, myData outputs, "Info for zip code 52484 from HTTP request"
}
task.resume()
return myData
}
当我调用myFunction时,我得到一个空字符串
myFunction(zipCode: "52484")// Outputs an empty string
我希望看到的是一个返回值“来自HTTP请求的邮政编码52484的信息”
,因为myData
变量在返回调用之前在let task=
中被修改。我尝试在let task=
中返回,但这无法在Swift中完成
调用
myFunction
时,如何返回检索到的值?由于请求是异步的,因此需要完成
func myFunction(zipCode: String,completion:@escaping(_ str:String?) -> () ) {
let siteLink = "http://example.com/zip/" + zipCode
let url = URL(string: siteLink)
let task = URLSession.shared.dataTask(with: url!) { data, response, error in
guard error == nil else {
print(error!)
completion(nil)
return
}
guard let data = data else {
print("Data is empty")
completion(nil)
return
}
let json = try! JSONSerialization.jsonObject(with: data, options: [])
guard let jsonArray = json as? [[String: String]] else {
completion(nil)
return
}
let myData = jsonArray[0]["MyPropertyName"]!
completion(myData)
}
task.resume()
}
召唤
myFunction(zipCode: "52484") { (str) in
if let st = str {
print(st)
}
}