gpt4 book ai didi

swift - 尝试通过完成处理程序从 URLSession 返回数据

转载 作者:行者123 更新时间:2023-11-28 13:58:34 25 4
gpt4 key购买 nike

我希望有人能提供帮助,我已经尝试了几个教程,我想我已经接近完成这项工作了。

我定义了一个名为 Patient 的结构体。它包含许多键:值对,与 JSON 响应中的信息相同。我能够在 Xcode 的控制台中打印此响应,它看起来不错。我想要做的是用 JSON 数据填充结构并通过完成处理程序返回它以供应用程序的其余部分使用。

我一直出错的地方是返回填充的结构,下面的代码在完成 block 所在的位置给我错误:

“无法将类型‘(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: [患者] = []

    ...

    do {
    let decoder = JSONDecoder()
    let patients = try decoder.decode(Array<Patient>.self, from: data)
    print(patients)
    doneStuffBlock(patients)
    } catch {
    print("Err", error)
    doneStuffBlock([])
    }

关于swift - 尝试通过完成处理程序从 URLSession 返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53728473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com