Ich habe einen Code, der viele Warnungen generiert (veraltete API)
Mit clang * könnte ich machen
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
...
#pragma clang diagnostic pop
Dies funktioniert jedoch nicht schnell.
Wie geht das schnell?
Hinweis: Ich möchte die Warnung weder global noch dateiweit deaktivieren, sondern nur eine bestimmte Warnung in einem bestimmten Teil meines Quellcodes deaktivieren.
Bearbeiten: Ich sehe aus, als ob meine Notiz nicht klar genug war: Ich möchte KEINE bedingte Kompilierung (was die vorgeschlagene Antwort des vermeintlichen Duplikats ist). Ich möchte nur eine Warnung zum Schweigen bringen, OHNE die neuen APIs zu verwenden.
#available
Makro, bei dem Entwickler neue Methoden verwenden und auf die alten zurückgreifen sollten, wenn neue nicht verfügbar sind.Antworten:
Ab 2020, Xcode 12.0, besteht Konsens darüber, dass es keine Möglichkeit gibt, dies zu erreichen.
Ich werde diese Antwort aktualisieren / bearbeiten, wenn Apple die Funktion hinzufügt.
Setzen Sie es in Ihre Wunschliste für WWDC 2021!
quelle
Es gibt kein allgemeines Konstrukt zum Schweigen von Verfallswarnungen in Swift, aber es gibt eine Problemumgehung, die in vielen Fällen angewendet werden kann .
Angenommen, Sie haben eine Methode
getLatestImage()
für eine Klasse,Foo
die veraltete Methoden / Klassen verwendet.Verwenden Sie diese Option
@available
wie von Daniel Thorpe beschrieben, um alle Warnungen innerhalb der Methode zum Schweigen zu bringen :Jetzt möchten Sie die Methode ohne eine Warnung zur Ablehnung aufrufen
getLatestImage()
. Sie können dies erreichen, indem Sie zuerst ein Protokoll und eine Erweiterung definieren:Rufen Sie dann die Methode ohne Verfallswarnung auf (wenn
foo
es sich um eine Instanz von handeltFoo
):Das Ergebnis ist, dass Sie über Swift-Code verfügen, der eine veraltete API ohne veraltete Warnungen verwendet.
quelle
Eigentlich Sie können diese Warnungen unterdrücken , indem Sie
@available
in der umschließenden logische Struktur (dh Funktion / Typ).Angenommen, Sie haben Code, der das AddressBook-Framework verwendet, aber Sie bauen auf iOS 9.
Ab Xcode 7.0.1 wird verhindert, dass Inline-Warnungen angezeigt werden.
quelle
addressBookStatus()
... anrufen , die Sie als veraltet markieren.class ViewController: UIViewController
)if CGFloat(0).native is Float { … }
? " Zum Schweigen bringen, wenn ich eine mache ? Antwort: Ich benutze das nicht, weil Sie die Frage nicht beantwortet haben.Während es in Swift derzeit keine Möglichkeit gibt, Verfallswarnungen auszuschalten, können Sie dies technisch für ein bestimmtes Symbol tun, indem Sie die Header-Datei bearbeiten.
File
>Open Quickly
Fügen Sie das Symbol ein und drücken Sie
Enter
Stellen Sie sicher, dass das Swift-Symbol im Feld Schnell öffnen deaktiviert ist
Wählen Sie
File
>Show in Finder
mit
Jetzt gibt es eine weniger ablenkende Warnung, gegen die Sie nichts tun können.
Ich weiß, es ist schmutzig. Wenn im aktuellen SDK jedoch keine Ersatz-API verfügbar ist , sollte diese sicher sein. Sobald eine neue Version von Xcode herauskommt, wird die Änderung überschrieben und Sie sehen die Warnung erneut. Anschließend können Sie das neue SDK und Betriebssystem testen, um sicherzustellen, dass die veraltete API weiterhin verfügbar ist und keinen Ersatz erhalten hat.
Bitte kommentieren Sie, ob Sie Nachteile haben können.
quelle