TL; DR
popViewController(animated:)
renvoie UIViewController?
, et le compilateur donne cet avertissement puisque vous ne capturez pas la valeur. La solution consiste à l'affecter à un trait de soulignement:
_ = navigationController?.popViewController(animated: true)
Swift 3 Change
Avant Swift 3, toutes les méthodes avaient un «résultat jetable» par défaut. Aucun avertissement ne se produit lorsque vous ne capturez pas ce que la méthode a renvoyé.
Afin d'indiquer au compilateur que le résultat doit être capturé, vous devez ajouter @warn_unused_result
avant la déclaration de méthode. Il serait utilisé pour les méthodes qui ont une forme mutable (ex. sort
Et sortInPlace
). Vous ajouteriez @warn_unused_result(mutable_variant="mutableMethodHere")
pour en informer le compilateur.
Cependant, avec Swift 3, le comportement est inversé. Toutes les méthodes avertissent désormais que la valeur de retour n'est pas capturée. Si vous voulez dire au compilateur que l'avertissement n'est pas nécessaire, vous ajoutez@discardableResult
avant la déclaration de méthode.
Si vous ne souhaitez pas utiliser la valeur de retour, vous devez le dire explicitement au compilateur en l'attribuant à un trait de soulignement:
_ = someMethodThatReturnsSomething()
Motivation pour l'ajouter à Swift 3:
- Prévention d'éventuels bugs (ex. Utilisation
sort
pensant que cela modifie la collection)
- Intention explicite de ne pas capturer ou de ne pas avoir besoin de capturer le résultat pour d'autres collaborateurs
L'API UIKit semble être en retard sur ce point, n'ajoutant pas @discardableResult
à l'utilisation parfaitement normale (sinon plus courante) de popViewController(animated:)
sans capturer la valeur de retour.
Lire la suite
let
: vous pouvez simplement assigner à _ sans le précéder aveclet
ouvar
.@discardableResult
) pour les fonctions qui renvoient une valeur mais où l'on s'attend à ce que l'on puisse ignorer la valeur de retour. UIKit n'a tout simplement pas appliqué cette annotation à son API.Quand la vie vous donne des citrons, faites une extension:
Notez que l'ajout de quelque chose comme
@discardableResult func pop(animated: Bool) -> UIViewController?
cela entraînera le même avertissement que vous essayez d'éviter.Avec l'extension, vous pouvez maintenant écrire:
Edit: Ajout de popToRoot aussi.
la source
Dans Swift 3, ignorer la valeur de retour d'une fonction qui a une valeur de retour déclarée entraîne un avertissement.
Une façon de désactiver cette option consiste à marquer la fonction avec l'
@discardableResult
attribut. Puisque vous n'avez aucun contrôle sur cette fonction, cela ne fonctionnera pas.L'autre méthode pour se débarrasser de l'avertissement est d'attribuer la valeur à
_
. Cela indique au compilateur que vous savez que la méthode renvoie une valeur mais que vous ne voulez pas la conserver en mémoire.la source
_
jusqu'à ce qu'Apple mette à jour UIKit avec ce nouvel attribut.@discardableResult
ne fonctionne pas (au moins il coasse toujours avec 8b4). Friedrich Schiller aimait les pommes pourries. Probablement une question de goût :-(Bien qu'il
work correctly if kept as it is
lenumber of warning increases.
La solution est tout simplement
replace it with underscore ( _ )
si elle semble être laide.la source
Utilisez discardableResult dans cette condition.
Selon <Swift Programming Language>, chapitre Référence du langage - Attributs.
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Attributes.html#//apple_ref/doc/uid/TP40014097-CH35-ID347
Il existe également une démo dans <Swift Programming Language>, chapitre Language Guide - Methods.
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Methods.html#//apple_ref/doc/uid/TP40014097-CH15-ID234
la source
Si vous voulez emprunter la voie des extensions comme la réponse de CodeReaper, vous devez utiliser
@descardableResult
. Cela conserve toutes les possibilités, mais fait taire l'avertissement.la source
Vous pouvez également déballer la
self.navigationController?
valeur et appeler lapopViewController
fonction.la source