我希望有人可以提供帮助,我已经尝试了一些教程,并且我想将其付诸实践。
我定义了一个名为Patient的结构。它包含数十个键:值对,并且与JSON响应中的信息相同。我可以在Xcode的控制台中打印此响应,看起来不错。我想做的是用JSON数据填充结构,并通过完成处理程序将其返回,以在应用程序的其余部分中使用。
我一直不停地返回已填充的结构,下面的代码在完成块所在的位置给了我错误:
“无法将类型'(Patient).Type'的值转换为预期的参数类型'患者'
我怀疑我只是非常困惑,并且缺少明显的东西。我们将不胜感激。
代码:
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()
}
答案 0 :(得分:1)
两个问题:
完成处理程序中的类型应该是数组
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([])
}