swift pragma swift2

swift - Cómo silenciar una advertencia rápidamente



pragma swift2 (3)

A partir de 2019, Xcode 11.0, el consenso es que no hay forma de lograrlo.

Actualizaré / editaré esta respuesta si Apple agrega la función.

¡Póngalo en su lista de deseos para WWDC 2020!

Tengo un código que genera muchas advertencias (API obsoleta)

Usando clang * podría hacer

#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" ... #pragma clang diagnostic pop

Sin embargo, esto no funciona de manera rápida.

¿Cómo hacerlo rápido?

Nota: No quiero deshabilitar la advertencia globalmente, ni siquiera el archivo, sino deshabilitar una advertencia específica en una parte específica de mi código fuente.

Editar: Parece que mi nota no fue lo suficientemente clara: NO quiero una compilación condicional (que es la respuesta propuesta del supuesto duplicado). Solo quiero silenciar una advertencia SIN usar las nuevas API.


En realidad, puede suprimir estas advertencias utilizando @available en la estructura lógica @available (es decir, función / tipo).

Por ejemplo, supongamos que tiene algún código que utiliza el marco de AddressBook, pero está compilando contra iOS 9.

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

A partir de Xcode 7.0.1, esto evitará que se muestren las advertencias en línea.


No existe una construcción general para silenciar las advertencias de desaprobación en Swift, pero existe una solución alternativa que se puede aplicar en muchos casos .

Digamos que tiene un método getLatestImage() en la clase Foo que usa métodos / clases en desuso.

Use @available como Daniel Thorpe describió para silenciar todas las advertencias dentro del método:

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

Ahora le gustaría llamar al método getLatestImage() sin tener una advertencia de desaprobación. Puede lograr eso definiendo primero un protocolo y una extensión:

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

Y luego llame al método sin una advertencia de desaprobación (si foo es una instancia de Foo ):

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

El resultado es que tiene un código Swift que usa API obsoleta sin ninguna advertencia de desaprobación.