【问题标题】:error: missing argument for parameter 'from' in call错误:调用中缺少参数“from”的参数
【发布时间】:2021-10-02 19:26:21
【问题描述】:

我正在尝试发出 http 获取请求,我想返回将在 JSON 中获得的数据转换为 Array 并将其作为参数从 routes.swift 文件发送到 leaf 模板,所有这一切都使用Vapor 框架,但我收到以下错误:

Error: missing argument for parameter 'from' in call
let json = JSONDecoder().decode(Todos.self).

这是我的代码:

app.get("datos") {req -> EventLoopFuture<View> in
    let url = URL(string: "https://jsonplaceholder.typicode.com/posts")
    guard let requestUrl = url else { fatalError("Error url") }
    var request = URLRequest(url: requestUrl)
    request.httpMethod = "GET"
    let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
        if let error = error {
            print("Error took place \(error.localizedDescription)") 
            return
        }
        if let response = response as? HTTPURLResponse {
            print("Response HTTP Status code: \(response.statusCode)")
        }
        if let data = data, let dataString = String(data: data, encoding: .utf8) {
            print("Response data string:\n \(dataString)")
        }
    }
    task.resume()
    let json = JSONDecoder().decode(Todos.self)
    return req.view.render("objetos", json)
}
struct Todos: Codable{
 var  userId: Int
 var  id: Int
 var  title: String
 var  body: String

}

【问题讨论】:

  • 错误是具体的,你需要指定from参数,我相信在你的代码中是data变量。 let json = JSONDecoder().decode(Todos.self, from: data)。此外,您还必须更改您的代码,dataTask 是异步的,并且您无法在它完成之前返回结果。
  • .decode() 有两个参数:要解码的类型和要解码的数据。您需要将其设为let json = JSONDecoder().decode(Todos.self, from: &lt;data goes here&gt;),其中您要查找的数据似乎是dataString,但它不会存在于if-let 的范围之外,因此您还需要移动解码行进入关闭状态。

标签: swift vapor


【解决方案1】:

不要使用 URLSession - 它不能很好地与 Vapor 的 futures 集成,并且基于 AsyncHTTPClient 构建的 Vapor 客户端的性能和集成度要高得多。然后,您可以将代码重写为:

app.get("datos") { req -> EventLoopFuture<View> in
    req.client.get("https://jsonplaceholder.typicode.com/posts").flatMap { response in
        let todos = try response.content.decode(Todos.self)
        return req.view.render("objetos", json)
    }    
}

【讨论】:

  • 非常感谢你的帮助,我很沮丧,但已经有了这个参考和一些修改它完美地工作
猜你喜欢
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
相关资源
最近更新 更多