2016-09-28 6 views
23

Vor Swift 3 I wurde mit:Handhabung Versuch und wirft in Swift 3

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

aber jetzt habe ich do, try und catch verwenden. Ich bin mit dieser Syntax nicht vertraut. Wie würde ich dieses Verhalten replizieren?

Antwort

70

Der Unterschied hier ist, dass Data(contentsOf: url) kein Optional zurückgibt, es wirft.

So können Sie es in Do-Fang verwenden, aber ohne 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) 
} 

Beachten Sie, dass Sie noch guard mit try? statt try aber dann die mögliche Fehlermeldung ignoriert nutzen könnten. In diesem Fall benötigen Sie keinen Do-Catch-Block:

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

Vielen Dank dafür! Das zweite Beispiel ist genau das, wonach ich suche! – KexAri

+0

@Moritz Gibt es eine Möglichkeit, die Fehlermeldung zur else-Klausel hinzuzufügen? – eonist

+0

@GitSync Nicht mit 'versuchen?', Nein. Sie benötigen Do-Try-Catch, um die Fehlermeldung zu erhalten. – Moritz