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

匿名 (未验证) 提交于 2019-12-03 02:30:02

问题:

I am trying to use swiftyjson and I am getting an Error:

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

I have validated that my source JSON is good. I've been searching and cannot find a solution to this problem

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() } } 

Thank you for all the help!

回答1:

You should wrap it into a do-catch block. In your case:

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:

The SwiftyJSON initializer throws, the declaration is

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

You have three options:

  1. Use a do - catch block and handle the error (the recommended one).

    do {    let json = try JSON(data: data)    print(json) } catch {    print(error)    // or display a dialog } 
  2. Ignore the error and optional bind the result (useful if the error does not matter).

    if let json = try? JSON(data: data) {    print(json) } 
  3. Force unwrap the result

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

    Use this option only if it's guaranteed that the attempt will never fail (not in this case!). Try! can be used for example in FileManager if a directory is one of the default directories the framework creates anyway.

For more information please read Swift Language Guide - Error Handling



回答3:

Probably you need to implement do{} catch{} block. Inside do block you have to call throwable function with try.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!