Dans Obj-C, une pratique courante consistait à utiliser des fonctions pratiques pour effectuer des opérations courantes, telles que la configuration de la présentation automatique pour les vues:
func makeConstraint(withAnotherView : UIView) -> NSLayoutConstraint
{
// Make some constraint
// ...
// Return the created constraint
return NSLayoutConstraint()
}
Si vous avez juste besoin de définir la contrainte et de l’oublier, vous pouvez appeler:
[view1 makeConstraint: view2]
Si vous voulez stocker la contrainte plus tard afin de pouvoir la supprimer/la modifier, vous feriez quelque chose comme:
NSLayoutConstraint * c;
c = [view1 makeConstraint: view2]
Je veux faire cela dans Swift, mais si j'appelle la fonction ci-dessus et ne capture pas la contrainte renvoyée, je reçois l'avertissement:
Result of call to 'makeConstraint(withAnotherView:)' is unused
Très ennuyant. Existe-t-il un moyen de faire savoir à Swift que je ne veux pas toujours capturer la valeur de retour?
NOTE: Je sais à ce sujet. C'est moche et pas ce que je cherche:
_ = view1.makeConstraint(withAnotherView: view2)
C'est un comportement qui a été introduit dans Swift 3. Au lieu d'avoir à annoter explicitement les fonctions avec @warn_unused_result
afin d'indiquer au compilateur que le résultat devrait être utilisé par l'appelant, il s'agit désormais du comportement par défaut.
Vous pouvez utiliser l'attribut @discardableResult
sur votre fonction pour informer le compilateur que la valeur de retour ne doit pas nécessairement être "consommée" par l'appelant.
@discardableResult
func makeConstraint(withAnotherView : UIView) -> NSLayoutConstraint {
... // do things that have side effects
return NSLayoutConstraint()
}
view1.makeConstraint(view2) // No warning
let constraint = view1.makeConstraint(view2) // Works as expected
Vous pouvez lire plus en détail sur ce changement sur la proposition d'évolution .
Vous pouvez essayer de désactiver les avertissements à partir des paramètres de construction de votre projet. J'aime la question, bon point. Fait quelques recherches et a trouvé ceci. https://stackoverflow.com/a/34932152/5615274
Je ne l'ai pas encore testé.