Est-ce que "let _ = …" (que le trait de soulignement soit égal) a une utilité dans Swift?

Est-ce que l'utilisation de let _ = ... a un quelconque but?

J'ai vu une question et des réponses pour Quel est le représentant de soulignement de dans Swift Références? et je sais que le trait de soulignement peut être utilisé pour représenter une variable qui n'est pas nécessaire .

Cela aurait du sens si je n'avais besoin que d'une valeur d'un tuple comme dans l'exemple du lien ci-dessus:

 let (result, _) = someFunctionThatReturnsATuple() 

Cependant, j'ai récemment rencontré ce code :

 do { let _ = try DB.run( table.create(ifNotExists: true) {t in t.column(teamId, primaryKey: true) t.column(city) t.column(nickName) t.column(abbreviation) }) } catch _ { // Error throw if table already exists } 

Je ne reçois aucun avertissement ou erreur du compilateur si je supprime simplement le let _ = . Il me semble que c'est plus simple et plus lisible.

 try DB.run( table.create(ifNotExists: true) {t in t.column(teamId, primaryKey: true) t.column(city) t.column(nickName) t.column(abbreviation) }) 

L'auteur du code a écrit un livre et un blog sur Swift . Je sais que les auteurs ne sont pas infaillibles, mais je me suis demandé s'il y avait quelque chose qui me manquait.

Vous obtiendrez un avertissement du compilateur si la méthode a été marquée avec warn_unused_result dans la documentation du développeur :

Appliquez cet atsortingbut à une déclaration de méthode ou de fonction pour que le compilateur émette un avertissement lorsque la méthode ou la fonction est appelée sans utiliser son résultat.

Vous pouvez utiliser cet atsortingbut pour fournir un message d'avertissement concernant l'utilisation incorrecte d'une méthode de non-mutation dotée d'une contrepartie de mutation.

Parfois, il est simple et plus propre à utiliser try? que do-catch , quand vous appelez quelque chose qui jette, mais a décidé de ne pas gérer les erreurs. Si vous laissez l'appel avec try? tel qu'il est, le compilateur vous avertira du résultat inutilisé, ce qui n'est pas bon. Vous pouvez donc ignorer les résultats en utilisant _ .

Exemple:

 let _ = try? NSFileManager.defaultManager().moveItemAtURL(url1, toURL: url2) 

Utiliser let _ = ... indique spécifiquement au compilateur que vous savez que l'expression sur la droite renvoie une valeur mais que vous ne vous en souciez pas.

Dans les cas où la méthode a été marquée avec warn_unused_result , si vous n'utilisez pas le caractère de soulignement, le compilateur se plaindra avec un avertissement. (Parce que dans certains cas cela peut être une erreur de ne pas utiliser la valeur de return.)