web-dev-qa-db-fra.com

Comment fonctionne l'erreur dans Swift dans Xcode 8 beta 4

Il semble que lors de la conversion de notre ancien code en version bêta 4, je continue de diffuser Error en NSError. Cela conduira même parfois à un avertissement "la conversion conditionnelle de" Erreur "en" NSError "réussit toujours". J'ai l'impression de ne pas comprendre comment utiliser au mieux Error. Je veux arriver à penser comme error.code, error.localizedDescription ... Y a-t-il une bonne documentation ou des tutoriels qui expliquent ces changements d'erreur?

Par exemple:

func webView(_ webView: UIWebView, didFailLoadWithError error: Error) { 

En ce moment, je fais quelque chose comme:

if let error = error as? NSError {
 if error.code == NSURLErrorCancelled {

Mais cela donne l'avertissement "La conversion conditionnelle de" Erreur "en" NSError "réussit toujours"

21
Jason Hocker

L'erreur est pontable à NSError de la même manière que String est pontable à NSString. C'est-à-dire (erreur comme NSError) fonctionnerait.

if  (error as NSError).code == NSURLErrorCancelled { 
    // code
}
30
DerrickHo328

Faites ceci:

Swift 3.0 et Swift 4.

if error._code == NSURLErrorCancelled { }
22
Van Du Tran

Erreur de capture dans Swift 3 a changé. Recherchez NSError dans Notes de version . Quote:

De plus, les types d'erreur importés de Cocoa et Cocoa Touch conservent toutes les informations dans le NSError correspondant, il n'est donc plus nécessaire de catch let as NSError pour extraire (par exemple) le dictionnaire d'informations utilisateur. Des types d'erreur spécifiques contiennent également des accesseurs typés pour leurs clés d'informations utilisateur communes. Par exemple:

do {
    let regex = try NSRegularExpression(pattern: "(", options: [])
} catch {
    // error is of type NSError already
    print(error.localizedDescription)
}
4
Code Different