J'ai un morceau de code qui génère beaucoup d'avertissements (API obsolète)
En utilisant clang * je pourrais faire
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
...
#pragma clang diagnostic pop
Cependant, cela ne fonctionne pas rapidement.
Comment le faire rapidement?
Remarque: je ne veux pas désactiver l'avertissement globalement, ni même à l'échelle du fichier, mais simplement désactiver un avertissement spécifique dans une partie spécifique de mon code source.
Edit: il me semble que ma note n'était pas assez claire: je ne veux PAS de compilation conditionnelle (qui est la réponse proposée du double supposé). Je veux juste faire taire un avertissement SANS utiliser les nouvelles API.
#available
macro où le développeur doit utiliser de nouvelles méthodes et revenir aux anciennes si de nouvelles ne sont pas disponibles.Réponses:
À partir de 2020, Xcode 12.0, le consensus est qu'il n'y a aucun moyen d'y parvenir.
Je mettrai à jour / modifierai cette réponse si Apple ajoute la fonctionnalité.
Mettez-le dans votre liste de souhaits pour la WWDC 2021!
la source
Il n'y a pas de construction générale pour faire taire les avertissements d'obsolescence dans Swift, mais il existe une solution de contournement qui peut être appliquée dans de nombreux cas .
Disons que vous avez une méthode
getLatestImage()
sur la classeFoo
qui utilise des méthodes / classes obsolètes.Utilisez
@available
comme Daniel Thorpe l'a décrit pour faire taire tous les avertissements à l' intérieur de la méthode:Vous souhaitez maintenant appeler la méthode
getLatestImage()
sans avertissement d'obsolescence. Vous pouvez y parvenir en définissant d'abord un protocole et une extension:Et puis appelez la méthode sans avertissement d'obsolescence (si
foo
est une instance deFoo
):Le résultat est que vous avez un code Swift qui utilise une API obsolète sans aucun avertissement de dépréciation.
la source
En fait, vous pouvez supprimer ces avertissements en utilisant
@available
dans la structure logique englobante (c.-à-d. Fonction / type).Par exemple, supposons que vous ayez du code qui utilise le framework AddressBook, mais que vous construisez avec iOS 9.
À partir de Xcode 7.0.1, cela empêchera l'affichage des avertissements en ligne.
la source
addressBookStatus()
... que vous marquez comme obsolète.class ViewController: UIViewController
)if CGFloat(0).native is Float { … }
? Réponse: Je ne l'utilise pas parce que vous n'avez pas répondu à la question.Bien qu'il n'y ait aucun moyen de faire taire les avertissements d'obsolescence dans Swift pour le moment, techniquement, vous pouvez le faire pour un symbole particulier en modifiant le fichier d'en-tête.
File
>Open Quickly
Collez le symbole et appuyez sur
Enter
Assurez-vous que l'icône Swift est désactivée dans la zone Ouvrir rapidement
Sélectionnez
File
>Show in Finder
avec
Il y a maintenant un avertissement moins distrayant auquel vous ne pouvez rien faire.
Je sais, c'est sale. Mais s'il n'y a pas d'API de remplacement disponible dans le SDK actuel, cela devrait être sûr. Une fois qu'une nouvelle version de Xcode sortira, la modification sera écrasée et vous verrez à nouveau l'avertissement. Ensuite, vous pouvez tester le nouveau SDK et le nouveau système d'exploitation pour vous assurer que l'API obsolète est toujours disponible et qu'elle n'a pas été remplacée.
Veuillez commenter si vous pouvez trouver des inconvénients.
la source