Tengo un fragmento de 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 con rapidez.
¿Cómo hacerlo en rápido?
Nota: No quiero deshabilitar la advertencia de forma global, ni siquiera en todo el archivo, solo deshabilito 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.
#available
macro donde el desarrollador debe usar nuevos métodos y recurrir a los antiguos si no hay nuevos disponibles.Respuestas:
A partir de 2020, Xcode 12.0, el consenso es que no hay forma de lograrlo.
Actualizaré / editaré esta respuesta si Apple agrega la función.
¡Ponlo en tu lista de deseos para la WWDC 2021!
fuente
No existe una construcción general para silenciar las advertencias de obsolescencia en Swift, pero hay una solución que se puede aplicar en muchos casos .
Digamos que tiene un método
getLatestImage()
en la claseFoo
que usa métodos / clases obsoletos.Use
@available
como lo describió Daniel Thorpe para silenciar todas las advertencias dentro del método:Ahora le gustaría llamar al método
getLatestImage()
sin tener una advertencia de obsolescencia. Puede lograrlo definiendo primero un protocolo y una extensión:Y luego llame al método sin una advertencia de desaprobación (si
foo
es una instancia deFoo
):El resultado es que tiene un código Swift que usa una API obsoleta sin advertencias de obsolescencia.
fuente
En realidad, puede suprimir estas advertencias mediante el uso
@available
de la estructura lógica adjunta (es decir, función / tipo).Por ejemplo, digamos que tiene un código que usa el marco de la libreta de direcciones, pero está construyendo contra iOS 9.
A partir de Xcode 7.0.1, esto evitará que se muestren las advertencias en línea.
fuente
addressBookStatus()
... que marca como obsoleto.class ViewController: UIViewController
)if CGFloat(0).native is Float { … }
? Respuesta: No uso esto porque no respondió la pregunta.Si bien no hay forma de silenciar las advertencias de desaprobación en Swift por ahora, técnicamente puede hacerlo para un símbolo en particular editando el archivo de encabezado.
File
>Open Quickly
Pega el símbolo y presiona
Enter
Asegúrese de que el icono de Swift esté desactivado en el cuadro Abrir rápidamente
Seleccione
File
>Show in Finder
con
Ahora hay una advertencia menos molesta sobre la que no puede hacer nada.
Lo sé, está sucio. Pero si no hay una API de reemplazo disponible en el SDK actual, debería ser seguro. Una vez que salga una nueva versión de Xcode, el cambio se sobrescribirá y volverá a ver la advertencia. Luego, puede probar el nuevo SDK y el sistema operativo para asegurarse de que la API obsoleta aún esté disponible y no haya recibido un reemplazo.
Por favor comente si se le ocurre alguna desventaja.
fuente