如何迅速沉默警告
我有一段代码会产生很多警告(不推荐使用的API)
使用铿锵*我可以做的
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" ... #pragma clang diagnostic pop
然而,这并不能迅速起作用。
如何迅速做到这一点?
注:我不想全局禁用警告,甚至文件范围,但只是在我的源代码的特定部分禁用特定的警告。
编辑:我看起来像我的笔记不够清楚:我不想要条件编译(这是所谓的重复build议的答案)。 我只是想沉默一个警告,而不使用新的API。
截至2017年,Xcode 9.0的共识是,没有办法做到这一点。
如果Apple添加该function,我将更新/编辑此答案。
把它放在WWDC 2018的愿望清单中!
实际上, 可以通过在封闭的逻辑结构(即函数/types)中使用@available
来禁止这些警告。
例如,假设你有一些使用AddressBook框架的代码,但是你正在构buildiOS 9。
@available(iOS, deprecated=9.0) func addressBookStatus() -> ABAuthorizationStatus { return ABAddressBookGetAuthorizationStatus() }
从Xcode 7.0.1开始,这将防止显示内联警告。
在Swift中没有一个通用的构造来消除弃用警告,但是有一个解决方法可以在很多情况下应用 。
假设你在类Foo
上有一个方法getLatestImage()
,它使用了不推荐使用的方法/类。
如Daniel Thorpe所述,使用@available
来使方法内部的所有警告@available
:
@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没有任何弃用警告。