Eu tenho um código que está gerando muitos avisos (API obsoleta)
Usando clang * eu poderia fazer
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
...
#pragma clang diagnostic pop
No entanto, isso não funciona rapidamente.
Como fazer isso rapidamente?
Nota: Não quero desabilitar o aviso globalmente, nem mesmo em todo o arquivo, mas apenas desabilitar um aviso específico em uma parte específica do meu código-fonte.
Edit: Parece que minha nota não foi clara o suficiente: eu NÃO quero compilação condicional (que é a resposta proposta da suposta duplicata). Eu só quero silenciar um aviso SEM usar as novas APIs.
#available
macro, onde o desenvolvedor deve usar novos métodos e voltar para os antigos se os novos não estiverem disponíveis.Respostas:
Em 2020, Xcode 12.0, o consenso é que não há como conseguir isso.
Vou atualizar / editar esta resposta se a Apple adicionar o recurso.
Coloque-o na sua lista de desejos para o WWDC 2021!
fonte
Não há uma construção geral para silenciar os avisos de depreciação no Swift, mas há uma solução alternativa que pode ser aplicada em muitos casos .
Digamos que você tenha um método
getLatestImage()
na classeFoo
que usa métodos / classes obsoletos.Use
@available
como Daniel Thorpe descreveu para silenciar todos os avisos dentro do método:Agora você gostaria de chamar o método
getLatestImage()
sem ter um aviso de descontinuação. Você pode conseguir isso definindo primeiro um protocolo e uma extensão:Em seguida, chame o método sem um aviso de suspensão de uso (se
foo
for uma instância deFoo
):O resultado é que você tem um código Swift que usa API obsoleta sem nenhum aviso de remoção.
fonte
Na verdade, você pode suprimir esses avisos usando
@available
a estrutura lógica envolvente (ou seja, função / tipo).Por exemplo, digamos que você tenha algum código que usa a estrutura AddressBook, mas está compilando com o iOS 9.
A partir do Xcode 7.0.1, isso impedirá que os avisos embutidos sejam exibidos.
fonte
addressBookStatus()
... que você marcará como obsoleto.class ViewController: UIViewController
)if CGFloat(0).native is Float { … }
? Resposta: Não uso isso porque você não respondeu à pergunta.Embora não haja nenhuma maneira de silenciar avisos de depreciação no Swift por enquanto, tecnicamente você pode fazer isso para um símbolo específico editando o arquivo de cabeçalho.
File
>Open Quickly
Cole o símbolo e pressione
Enter
Certifique-se de que o ícone Swift está desabilitado na caixa Abrir rapidamente
Selecione
File
>Show in Finder
com
Agora há um aviso a menos que o distrai, pelo qual você nada pode fazer.
Eu sei, está sujo. Mas se não houver API substituta disponível no SDK atual, deve ser seguro. Assim que uma nova versão do Xcode for lançada, a alteração será substituída e você verá o aviso novamente. Em seguida, você pode testar o novo SDK e sistema operacional para garantir que a API obsoleta ainda esteja disponível e não tenha uma substituição.
Por favor, comente se você puder encontrar alguma desvantagem.
fonte