如何迅速沉默警告

我有一段代码会产生很多警告(不推荐使用的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 {} 

然后调用没有弃用警告的方法(如果fooFoo一个实例):

 (foo as GetLatestImage).getLatestImage() // no deprecation warning 

结果是你有Swift的代码,使用不赞成的API没有任何弃用警告。