【问题标题】:Invalid Conversion Error from JSON data handler?来自 JSON 数据处理程序的无效转换错误?
【发布时间】:2020-07-25 20:25:04
【问题描述】:

我正在尝试使用 dataTask 类读取 URL,但遇到了有线错误,请有人帮我解码

错误:

从“(Data?, URLResponse?, Error?) throws -> Void' 类型的抛出函数到非抛出函数类型“(Data?, URLResponse?, Error?) -> Void”的无效转换

 let url = URL(string: source)!
    let session = URLSession(configuration: .default)
     session.dataTask(with: url) { (data, _, err) in
        if err != nil {
            print ((err?.localizedDescription)!)
            return
        }
        let json = try !JSON(data : data!)
        for i in json["articles"] {
            let title = i.1["title"].stringValue
            let description = i.1["description"].stringValue
            let url = i.1["url"].stringValue
            let image = i.1["urlToImage"].stringValue
            let id = i.1["publishedAt"].stringValue
            
            self.datas.append(dataType(id: String, title: <#T##String#>, desc: <#T##String#>, url: <#T##String#>, image: <#T##String#>))
        }
    }

【问题讨论】:

标签: ios swift swiftui


【解决方案1】:

问题是这不是一个抛出函数,所以你不能直接在函数内说try。而是将 try 放在 do 部分 do...catch 构造中。

(也修复try和感叹号之间的空格。实际上这可能会解决整个问题:try! JSON(...。但一般来说,不要这样做;说try而不带感叹号和catch 错误,所以如果有错误,你可以找出它是什么。说try! 会丢掉有价值的信息。)

【讨论】:

    【解决方案2】:

    每当您处理抛出函数时,您都需要添加do 块。在您的情况下,JSON(data: data!) 可能会引发错误。

    所有抛出函数都处理可以在catch 块中捕获的错误。在catch 块中,您可以在某处记录错误或相应地处理它们,例如向用户显示警报以及根据错误执行的步骤。

    以下将消除Xcode错误:

    let url = URL(string: source)!
    let session = URLSession(configuration: .default)
    session.dataTask(with: url) { (data, _, err) in
        if let error = error {
            print(error.localizedDescription)
            return
        }
        do {
            let json = try JSON(data : data!)
            for i in json["articles"] {
                let title = i.1["title"].stringValue
                let description = i.1["description"].stringValue
                let url = i.1["url"].stringValue
                let image = i.1["urlToImage"].stringValue
                let id = i.1["publishedAt"].stringValue
    
                self.datas.append(dataType(id: id, title: title, desc: description, url: url, image: image))
    
            }
        } catch let error {
            print(error.localizedDescription)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      • 2017-03-20
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      相关资源
      最近更新 更多