尝试通过来自 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()
}

两期:

  1. 完成句柄中的类型应该是数组

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