swiftyjson - 呼叫可以抛出,但它标有“尝试”#39;并且不处理错误

时间:2017-05-31 23:52:40

标签: swift swifty-json

我正在尝试使用swiftyjson,我收到错误:

  

通话可以抛出,但标有“尝试”#39;而错误不是   处理。

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

return value ?? "Unknown";

感谢您的帮助!

3 个答案:

答案 0 :(得分:47)

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

  4. 有关详细信息,请参阅Swift Language Guide - Error Handling

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

调用throwable函数