swiftyjson - 调用可以抛出,但它被标记为'try'并且错误未处理



我正在尝试使用swiftyjson,而我遇到了一个错误:

呼叫可以投掷,但标有"尝试",错误不是 处理。

我已经验证了我的源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()
}
}

感谢您的所有帮助!

swiftyjson initializer 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)
    

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

有关更多信息,请阅读Swift语言指南 - 错误处理

您应该将其包装到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
}

可能需要实现do{} catch{}块。在do块内部,您必须通过尝试调用可投掷功能。

最新更新