web-dev-qa-db-fra.com

swiftyjson - L'appel peut être lancé, mais il est marqué par «essayer» et l'erreur n'est pas gérée

J'essaie d'utiliser swiftyjson et j'obtiens une erreur:

L'appel peut être lancé, mais il est marqué par "essayer" et l'erreur n'est pas gérée.

J'ai validé que ma source JSON est bonne. J'ai cherché et je ne trouve pas de solution à ce problème

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

Merci pour votre aide!

11
user7748962

Vous devriez l'envelopper dans un do-catch bloquer. Dans ton cas:

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
}
3
Rashwan L

L'initialiseur SwiftyJSON throws, la déclaration est

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

Vous avez trois options:

  1. Utiliser un do - catch bloque et gère l'erreur (celle recommandée).

    do {
       let json = try JSON(data: data)
       print(json)
    } catch {
       print(error)
       // or display a dialog
    }
    
  2. Ignorez l'erreur et liez facultativement le résultat (utile si l'erreur n'a pas d'importance).

    if let json = try? JSON(data: data) {
       print(json)
    }
    
  3. Forcer le déroulement du résultat

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

    N'utilisez cette option que s'il est garanti que la tentative n'échouera jamais (pas dans ce cas!). Try! peut être utilisé par exemple dans FileManager si un répertoire est l'un des répertoires par défaut que le framework crée quand même.

Pour plus d'informations, veuillez lire Swift Language Guide - Error Handling

48
vadian

Vous devez probablement implémenter do{} catch{} bloquer. Dans le bloc do, vous devez appeler la fonction jetable avec try.

0
noob