web-dev-qa-db-fra.com

Manipulation essayer et jeter Swift 3

Avant Swift 3 J'utilisais:

guard let data = Data(contentsOf: url) else {
                print("There was an error!)
                return
            }

Cependant, je dois maintenant utiliser do, try et catch. Je ne suis pas familier avec cette syntaxe. Comment pourrais-je reproduire ce comportement?

41
KexAri

La différence ici est que Data(contentsOf: url) ne renvoie plus un optionnel, il le jette.

Vous pouvez donc l’utiliser dans Do-Catch mais sans guard:

do {
    let data = try Data(contentsOf: url)
    // do something with data
    // if the call fails, the catch block is executed
} catch {
    print(error.localizedDescription)
}

Notez que vous pouvez toujours utiliser guard avec try? au lieu de try, mais le message d'erreur possible est ignoré. Dans ce cas, vous n'avez pas besoin d'un bloc Do-Catch:

guard let data = try? Data(contentsOf: url) else {
    print("There was an error!")
    // return or break
}
// do something with data
107
ayaio