试图通过URLSession的完成处理程序返回数据



我希望有人能帮忙,我已经尝试了几个教程,我想我即将实现这一点。

我定义了一个结构,名为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()
}

两个问题:

  1. 完成处理程序中的类型应该是数组

    func getReturnA(doneStuffBlock: @escaping ([Patient]) -> Void) {
    
  2. 区分大小写很重要(类型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([])
    }
    

相关内容

  • 没有找到相关文章

最新更新