swiftyjson - 调用可以抛出,但是被标记为'try',错误没有被处理

swiftyjson - Call can throw, but it is marked with 'try' and the error is not handled

我正在尝试使用 swiftyjson,但出现错误:

Call can throw, but it is marked with 'try' and the error is not handled.

我已经验证我的来源 JSON 是好的。我一直在搜索,但找不到解决此问题的方法

import Foundation


class lenderDetails
{

func loadLender()
{

    let lenders = ""

    let url = URL(string: lenders)!
    let session =  URLSession.shared.dataTask(with: url)
    {
        (data, response, error) in


        guard let data = data else
        {
            print ("data was nil?")
            return
        }

        let json = JSON(data: data)
        print(json)
    }

    session.resume()
}
}

感谢大家的帮助!

可能您需要实施 do{} catch{} 块。在 do 块中,您必须使用 try.

调用 throwable 函数

您应该将其包装到 do-catch 块中。你的情况:

do {
    let session =  URLSession.shared.dataTask(with: url) {
        (data, response, error) in
            guard let data = data else {
            print ("data was nil?")
            return
        }

        let json = JSON(data: data)
        print(json)
    }
} catch let error as NSError {
    // error
}

SwiftyJSON 初始化器throws,声明为

public init(data: Data, options opt: JSONSerialization.ReadingOptions = []) throws

您有三个选择:

  1. 使用do - catch块并处理错误(推荐的)。

    do {
       let json = try JSON(data: data)
       print(json)
    } catch {
       print(error)
       // or display a dialog
    }
    
  2. 忽略错误并可选地绑定结果(如果错误无关紧要则很有用)。

    if let json = try? JSON(data: data) {
       print(json)
    }
    
  3. 强制解包结果

    let json = try! JSON(data: data)
    print(json)
    

    只有在保证尝试永远不会失败的情况下才使用此选项(在这种情况下不会!)。 Try! 可以在 FileManager 中使用,如果目录是框架创建的默认目录之一。

更多信息请阅读Swift Language Guide - Error Handling