Ответ 1
По состоянию на 2017 год, Xcode 9.0, консенсус в том, что для этого не существует способа.
Я обновлю/отредактирую этот ответ, если Apple добавит эту функцию.
Поместите его в свой список пожеланий для WWDC 2018!
У меня есть часть кода, которая генерирует множество предупреждений (устаревший API)
Использование clang * Я мог бы сделать
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
...
#pragma clang diagnostic pop
Однако это не работает быстро.
Как это сделать быстро?
Примечание. Я не хочу отключать предупреждение глобально или даже широко, но просто отключить конкретное предупреждение в определенной части моего исходного кода.
Изменить: Мне кажется, что моя заметка была недостаточно ясной: я НЕ хочу условной компиляции (которая является предлагаемым ответом предполагаемого дубликата). Я просто хочу отключить предупреждение БЕЗ использования новых API.
По состоянию на 2017 год, Xcode 9.0, консенсус в том, что для этого не существует способа.
Я обновлю/отредактирую этот ответ, если Apple добавит эту функцию.
Поместите его в свой список пожеланий для WWDC 2018!
Собственно, вы можете подавить эти предупреждения, используя @available
в охватывающей логической структуре (т.е. функции/типа).
Например, скажем, у вас есть код, который использует структуру AddressBook, но вы создаете против iOS 9.
@available(iOS, deprecated: 9.0)
func addressBookStatus() -> ABAuthorizationStatus {
return ABAddressBookGetAuthorizationStatus()
}
Как и в Xcode 7.0.1, это предотвратит отображение встроенных предупреждений.
В Swift нет общей конструкции для молчания предупреждений об устаревании, но есть обходное решение, которое может быть применено во многих случаях.
Скажем, у вас есть метод getLatestImage()
в классе Foo
, который использует устаревшие методы/классы.
Используйте @available
, как описано Daniel Thorpe, чтобы отключить все предупреждения внутри метода:
@available(iOS, deprecated: 9.0)
func getLatestImage() -> UIImage? {
...
}
Теперь вы хотите вызвать метод getLatestImage()
без предупреждения об устаревании. Это можно достичь, предварительно определив протокол и расширение:
private protocol GetLatestImage {
func getLatestImage() -> UIImage?
}
extension Foo: GetLatestImage {}
И затем вызовите метод без предупреждения об отказе (если Foo
является экземпляром Foo
):
(foo as GetLatestImage).getLatestImage() // no deprecation warning
В результате у вас есть код Swift, который использует устаревший API без каких-либо предупреждений об отказе.