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

11 swift swifty-json

我想使用swiftyjson,我收到一个错误:

调用可以抛出,但标记为'try',并且不处理错误.

我已经验证了我的源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()
}
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

vad*_*ian 48

SwiftyJSON初始化程序throws,声明是

public init(data: Data, options opt: JSONSerialization.ReadingOptions = []) throws
Run Code Online (Sandbox Code Playgroud)

你有三个选择:

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

    do {
       let json = try JSON(data: data)
       print(json)
    } catch {
       print(error)
       // or display a dialog
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 忽略错误并选择绑定结果(如果错误无关紧要,则非常有用).

    if let json = try? JSON(data: data) {
       print(json)
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 强制打开结果

    let json = try! JSON(data: data)
    print(json)
    
    Run Code Online (Sandbox Code Playgroud)

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

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

  • 这应该是选定的答案! (2认同)

Ras*_*n L 4

你应该把它包装成一个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
}
Run Code Online (Sandbox Code Playgroud)