2016-09-28 13 views
23

Przed Swift 3 używałem:Handling try i rzuca w Swift 3

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

Jednak teraz mam użyć do, try i catch. Nie znam tej składni. Jak mogę replikować to zachowanie?

Odpowiedz

70

Różnica polega na tym, że Data(contentsOf: url) nie zwraca już Opcjonalnego, to wyrzuca.

więc można go używać w Do-catch ale bez 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) 
} 

Zauważ, że można nadal korzystać z try?guard zamiast try ale wtedy możliwy komunikat o błędzie jest ignorowany. W takim przypadku nie potrzebujesz bloku Do-Catch:

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

Dzięki za to! Drugi przykład jest dokładnie tym, czego szukam! – KexAri

+0

@Moritz Czy istnieje sposób na dodanie komunikatu o błędzie do klauzuli else? – eonist

+0

@GitSync Nie z "spróbuj?", Nie. Potrzebujesz Do-Try-Catch, aby uzyskać komunikat o błędzie. – Moritz