我希望有人能帮忙,我已经尝试了几个教程,我想我即将实现这一点。
我定义了一个结构,名为Patient。它包含数十个key:value对,并且与JSON响应中的信息完全相同。我可以在控制台中用Xcode打印这个响应,它看起来很好。我试图做的是用JSON数据填充结构,并通过完成处理程序返回它,以便在应用程序的其余部分中使用。
我一直在返回填充的结构,下面的代码在完成块所在的位置给了我错误:
"无法将"(Patient(.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
(
建议以复数形式命名表示数组的变量,并在出现错误时返回空数组。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([]) }