Comment faire taire un avertissement rapide

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 souhaite pas désactiver l’avertissement de manière globale, ni même élargir le fichier, mais simplement désactiver un avertissement spécifique dans une partie spécifique de mon code source.

Edit: il semble que ma note ne soit pas assez claire: je ne veux PAS de compilation conditionnelle (qui est la réponse proposée du doublon supposé). Je veux juste faire taire un avertissement SANS utiliser les nouvelles API.

En 2018, Xcode 10.0, le consensus est qu’il n’y a aucun moyen d’y parvenir.

Je mettrai à jour / modifier cette réponse si Apple ajoute la fonctionnalité.

Mettez-le dans votre liste de souhaits pour WWDC 2019!

En fait, vous pouvez supprimer ces avertissements en utilisant @available dans la structure logique englobante (par exemple, fonction / type).

Par exemple, disons que vous avez du code qui utilise le framework AddressBook, mais que vous construisez sur iOS 9.

 @available(iOS, deprecated: 9.0) func addressBookStatus() -> ABAuthorizationStatus { return ABAddressBookGetAuthorizationStatus() } 

À partir de Xcode 7.0.1, cela empêchera l’affichage des avertissements en ligne.

Il n’y a pas de construction générale pour faire taire les avertissements de dépréciation 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 classe Foo qui utilise des méthodes / classes obsolètes.

Utilisez @available comme décrit par Daniel Thorpe pour réduire au silence tous les avertissements dans la méthode:

 @available(iOS, deprecated: 9.0) func getLatestImage() -> UIImage? { ... } 

Maintenant, vous souhaitez appeler la méthode getLatestImage() sans avertissement de dépréciation. Vous pouvez y parvenir en définissant d’abord un protocole et une extension:

 private protocol GetLatestImage { func getLatestImage() -> UIImage? } extension Foo: GetLatestImage {} 

Et puis appelez la méthode sans avertissement de dépréciation (si foo est une instance de Foo ):

 (foo as GetLatestImage).getLatestImage() // no deprecation warning 

Le résultat est que vous avez du code Swift qui utilise une API obsolète sans avertissements de dépréciation.