Mam fragment kodu, który generuje wiele ostrzeżeń (przestarzały interfejs API)
Używając clang * mogłem to zrobić
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
...
#pragma clang diagnostic pop
Jednak to nie działa szybko.
Jak to zrobić szybko?
Uwaga: nie chcę wyłączać ostrzeżenia globalnie ani nawet całego pliku, ale po prostu wyłączyć określone ostrzeżenie w określonej części mojego kodu źródłowego.
Edycja: Wygląda na to, że moja uwaga nie była wystarczająco jasna: NIE chcę kompilacji warunkowej (która jest proponowaną odpowiedzią na rzekomy duplikat). Chcę tylko wyciszyć ostrzeżenie BEZ korzystania z nowych interfejsów API.
#available
makro, w którym programista powinien użyć nowych metod i powrócić do starych, jeśli nowe nie są dostępne.Odpowiedzi:
Od 2020 r., Xcode 12.0, konsensus jest taki, że nie ma sposobu, aby to osiągnąć.
Zaktualizuję / edytuję tę odpowiedź, jeśli Apple doda tę funkcję.
Umieść to na swojej liście życzeń na WWDC 2021!
źródło
Nie ma ogólnej konstrukcji wyciszania ostrzeżeń o wycofaniu w Swift, ale istnieje obejście, które można zastosować w wielu przypadkach .
Powiedzmy, że masz
getLatestImage()
w klasie metodę,Foo
która używa przestarzałych metod / klas.Użyj tego,
@available
co opisał Daniel Thorpe, aby wyciszyć wszystkie ostrzeżenia wewnątrz metody:Teraz chciałbyś wywołać metodę
getLatestImage()
bez ostrzeżenia o wycofaniu. Możesz to osiągnąć, definiując najpierw protokół i rozszerzenie:Następnie wywołaj metodę bez ostrzeżenia o wycofaniu (jeśli
foo
jest instancjąFoo
):W rezultacie masz kod Swift, który używa przestarzałego interfejsu API bez żadnych ostrzeżeń o wycofaniu.
źródło
W rzeczywistości można wyłączyć te ostrzeżenia, używając
@available
w otaczającej strukturze logicznej (tj. Funkcji / typu).Na przykład załóżmy, że masz kod, który korzysta ze struktury AddressBook, ale tworzysz w systemie iOS 9.
Począwszy od Xcode 7.0.1 zapobiegnie to wyświetlaniu ostrzeżeń wbudowanych.
źródło
addressBookStatus()
..., które oznaczysz jako przestarzałe.class ViewController: UIViewController
)if CGFloat(0).native is Float { … }
? Odpowiedź: Nie używam tego, ponieważ nie odpowiedziałeś na pytanie.Chociaż na razie nie ma sposobu na wyciszenie ostrzeżeń o wycofaniu w Swift, technicznie możesz to zrobić dla określonego symbolu, edytując plik nagłówkowy.
File
>Open Quickly
Wklej symbol i naciśnij
Enter
Upewnij się, że ikona Swift jest wyłączona w polu Otwórz szybko
Wybierz
File
>Show in Finder
z
Teraz jest jedno rozpraszające ostrzeżenie mniej, z którym nie możesz nic zrobić.
Wiem, jest brudne. Ale jeśli w obecnym SDK nie ma dostępnego zastępczego interfejsu API , powinien być bezpieczny. Gdy pojawi się nowa wersja Xcode, zmiana zostanie nadpisana i ponownie zobaczysz ostrzeżenie. Następnie możesz przetestować nowy pakiet SDK i system operacyjny, aby upewnić się, że wycofany interfejs API jest nadal dostępny i nie został zastąpiony.
Prosimy o komentarz, jeśli możesz wymyślić jakieś wady.
źródło