SwiftyJSON - 调用可能会抛出异常,但标记了'try',且错误未被处理。

13

我正在尝试使用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()
}
}

非常感谢您提供的所有帮助!

3个回答

59

SwiftyJSON的初始化程序会抛出异常,声明如下:

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. 忽略错误并选择性地绑定结果(如果错误不重要则很有用)。

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

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

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

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


3
这应该被选为答案! - Ahmadreza
谢谢,第三个方法对我没用...不知道为什么,但第一和第二个方法也没用 =-=" 有什么想法吗?*只是好奇为什么 - dmh
@dmh 三种方法都应该可以运行。你遇到了什么错误信息? - vadian
调用可能会抛出异常,但它被标记为“try”,并且错误没有被处理。即使尝试重建项目并关闭Xcode工作区,仍然会出现错误... - dmh
@dmh 检查 do - catch 代码块中大括号的平衡性。 - vadian

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
}

0

可能你需要实现do{} catch{}块。在do块内,你必须使用try调用可抛出的函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接