У меня есть фрагмент кода, который генерирует множество предупреждений (устаревший API)
Используя clang *, я мог бы сделать
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
...
#pragma clang diagnostic pop
Однако это не работает быстро.
Как это сделать быстро?
Примечание. Я не хочу отключать предупреждение глобально или даже для всего файла, а просто отключу конкретное предупреждение в определенной части исходного кода.
Изменить: похоже, моя заметка была недостаточно ясной: я НЕ хочу условной компиляции (это предлагаемый ответ предполагаемого дубликата). Я просто хочу отключить предупреждение БЕЗ использования новых API.
#available
макрос, где разработчик должен использовать новые методы и откатиться к старым, если новые недоступны.Ответы:
По состоянию на 2020 год, Xcode 12.0, единодушное мнение заключается в том, что этого невозможно достичь.
Я обновлю / отредактирую этот ответ, если Apple добавит эту функцию.
Поместите его в свой список желаний на WWDC 2021!
источник
В Swift нет общей конструкции для отключения предупреждений об устаревании, но есть обходной путь, который можно применить во многих случаях .
Допустим, у вас есть метод
getLatestImage()
класса,Foo
который использует устаревшие методы / классы.Используйте,
@available
как описал Даниэль Торп, чтобы отключить все предупреждения внутри метода:Теперь вы хотите вызвать метод
getLatestImage()
без предупреждения об устаревании. Вы можете добиться этого, сначала определив протокол и расширение:А затем вызовите метод без предупреждения об устаревании (если
foo
это экземплярFoo
):В результате у вас есть код Swift, который использует устаревший API без каких-либо предупреждений об устаревании.
источник
Фактически, вы можете подавить эти предупреждения, используя
@available
во включающую логическую структуру (то есть функцию / тип).Например, предположим, что у вас есть код, использующий структуру AddressBook, но вы строите его на базе iOS 9.
Начиная с Xcode 7.0.1 это предотвратит отображение встроенных предупреждений.
источник
addressBookStatus()
... который вы помечаете как устаревший.class ViewController: UIViewController
)if CGFloat(0).native is Float { … }
? Ответ: Я не использую это, потому что вы не ответили на вопрос.Хотя на данный момент нет способа отключить предупреждения об устаревании в Swift, технически вы можете сделать это для определенного символа, отредактировав файл заголовка.
File
>Open Quickly
Вставьте символ и нажмите
Enter
Убедитесь, что значок Swift отключен в поле «Открыть быстро».
Выбрать
File
>Show in Finder
с участием
Теперь есть одно менее отвлекающее предупреждение, с которым вы ничего не можете поделать.
Я знаю, это грязно. Но если в текущем SDK нет альтернативного API , это должно быть безопасно. Как только выйдет новая версия Xcode, изменение будет перезаписано, и вы снова увидите предупреждение. Затем вы можете протестировать новый SDK и ОС, чтобы убедиться, что устаревший API по-прежнему доступен и не получил замены.
Прокомментируйте, если вы заметите какие-либо недостатки.
источник