尝试通过来自 URLSession 的完成处理程序 return 数据
Trying to return data via completion handler from a URLSession
我希望有人能提供帮助,我已经尝试了几个教程,我想我已经接近完成这项工作了。
我定义了一个名为 Patient 的结构。它包含许多键:值对,与 JSON 响应中的信息相同。我可以在 Xcode 的控制台中打印此响应,看起来不错。我想要做的是用 JSON 数据填充结构,并通过完成处理程序 return 将其用于应用程序的其余部分。
我一直出错的地方是 return 填充的结构,下面的代码在完成块所在的位置给我错误:
"Cannot convert value of type '(Patient).Type' to expected argument type 'Patient'"
我怀疑我只是很困惑,我遗漏了一些明显的东西。非常感谢任何帮助我完成这个过程的人。
代码:
import Foundation
func getReturnA(doneStuffBlock: @escaping (Patient) -> Void) {
var patient: [Patient] = []
// set up URL request
guard let url = URL(string: "http://***.***.***.***/backend/returnA") else {
print("Can't create URL")
return
}
let urlRequest = URLRequest(url: url)
// set up the session
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
// make the request
let task = session.dataTask(with: urlRequest) { (data, response, error) in
guard let data = data else {
print("Did not recieve data")
return
}
do {
let decoder = JSONDecoder()
let patient = try decoder.decode(Array<Patient>.self, from: data)
print(patient.self)
} catch let err {
print("Err", err)
}
doneStuffBlock(Patient)
}
task.resume()
}
两期:
完成句柄中的类型应该是数组
func getReturnA(doneStuffBlock: @escaping ([Patient]) -> Void) {
区分大小写很重要(类型 Patient
与变量名 patient
)。
建议以复数形式命名一个代表数组的变量,return 一个空数组以防出错。
var patient: [Patient] = []
...
do {
let decoder = JSONDecoder()
let patients = try decoder.decode(Array<Patient>.self, from: data)
print(patients)
doneStuffBlock(patients)
} catch {
print("Err", error)
doneStuffBlock([])
}
我希望有人能提供帮助,我已经尝试了几个教程,我想我已经接近完成这项工作了。
我定义了一个名为 Patient 的结构。它包含许多键:值对,与 JSON 响应中的信息相同。我可以在 Xcode 的控制台中打印此响应,看起来不错。我想要做的是用 JSON 数据填充结构,并通过完成处理程序 return 将其用于应用程序的其余部分。
我一直出错的地方是 return 填充的结构,下面的代码在完成块所在的位置给我错误:
"Cannot convert value of type '(Patient).Type' to expected argument type 'Patient'"
我怀疑我只是很困惑,我遗漏了一些明显的东西。非常感谢任何帮助我完成这个过程的人。
代码:
import Foundation
func getReturnA(doneStuffBlock: @escaping (Patient) -> Void) {
var patient: [Patient] = []
// set up URL request
guard let url = URL(string: "http://***.***.***.***/backend/returnA") else {
print("Can't create URL")
return
}
let urlRequest = URLRequest(url: url)
// set up the session
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
// make the request
let task = session.dataTask(with: urlRequest) { (data, response, error) in
guard let data = data else {
print("Did not recieve data")
return
}
do {
let decoder = JSONDecoder()
let patient = try decoder.decode(Array<Patient>.self, from: data)
print(patient.self)
} catch let err {
print("Err", err)
}
doneStuffBlock(Patient)
}
task.resume()
}
两期:
完成句柄中的类型应该是数组
func getReturnA(doneStuffBlock: @escaping ([Patient]) -> Void) {
区分大小写很重要(类型
Patient
与变量名patient
)。
建议以复数形式命名一个代表数组的变量,return 一个空数组以防出错。var patient: [Patient] = []
... do { let decoder = JSONDecoder() let patients = try decoder.decode(Array<Patient>.self, from: data) print(patients) doneStuffBlock(patients) } catch { print("Err", error) doneStuffBlock([]) }