我有一个类公开了一些方法,其实现由内部对象提供。
我使用前向调用在运行时将方法调用分派到内部对象,但 XCode 会抱怨,因为它找不到所声明方法的实现。
我在 SO 上发现了一些其他类似的问题,但所有这些问题都通过设计更改得到了解决。
我并不是想在这里讨论设计,但如果有人对此有一些建议,我有一个关于代码审查的开放式问题,这更适合此类讨论。
我的问题是是否存在关闭 XCode 中的
Incomplete Implementation
警告的方法。
您可以通过添加
来抑制
Incomplete Implementation
警告
#pragma clang diagnostic ignored "-Wincomplete-implementation"
就在
@implementation
上方
希望这有帮助
编辑
在评论中被告知这对某人不起作用并发现原因是因为这是他们收到的不同警告之后,我做了一些尝试并能够解决该问题,所以我想我会更新这个答案以包括他们的答案,并且
GCC
也会忽略。因此,对于 @Tony
的问题,以下应该有效
#pragma clang diagnostic ignored "-Wprotocol"
对于任何想了解
GCC
编译器版本的人来说,它是
#pragma GCC diagnostic ignored "-Wprotocol"
#pragma GCC diagnostic ignored "-Wincomplete-implementation"
我还将指出,所有这些
diagnotstic ignores
也可以通过转到 XCODE Project >> Target >> Build Phases >> Compile Sources
并添加编译器标志来指定每个文件的设置来完成,这样您只需添加 -Wprotocol
或 Wincomplete-implementation
或您需要的任何编译器标志。
希望此更新对所有人有所帮助,如果需要的话我会更新我的答案以包括在内。
编辑2
我对此进行了更多的挖掘,并发现了Clang编译器用户手册,所以我认为这对于仍然在该领域遇到问题的任何人来说都是有趣且有帮助的。
我还找到了另一种方法,你可以使用这些
#pragma diagnostic ignores
,那就是你可以push
和pop
它们,所以如果你想忽略文件的特定部分而不是全部,那么你可以这样做以下
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmultichar"
// And pop the warning is gone.
char b = 'fa';
#pragma clang diagnostic pop
请记住,所有这些
#pragma
编译忽略也可以与 GCC
一起使用,因此上面的内容
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmultichar"
// And pop the warning is gone.
char b = 'fa';
#pragma GCC diagnostic pop
push
和pop
似乎可以与我迄今为止尝试过的所有diagnostic ignores
配合使用。
还有一个是
#pragma clang diagnostic ignored "UnresolvedMessage"
#pragma GCC diagnostic ignored "UnresolvedMessage"
抑制未使用变量的方法是
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
NSString *myUnusedVariable;
#pragma clang diagnostic pop
GCC 版本是
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
NSString *myUnusedVariable;
#pragma GCC diagnostic pop
还有一些忽略来自 unavailableInDeploymentTarget 的警告
#pragma clang diagnostic push
#pragma ide diagnostic ignored "UnavailableInDeploymentTarget"
leftEdge.barTintColor = rightEdge.barTintColor = self.toolbar.barTintColor;
#pragma clang diagnostic pop
和执行选择器泄漏
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[target performSelector:cancelAction withObject:origin];
#pragma clang diagnostic pop
和已弃用的声明
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
button = [[UIBarButtonItem alloc] initWithTitle:buttonTitle style:UIBarButtonItemStyleBordered target:self action:@selector(customButtonPressed:)];
#pragma clang diagnostic pop
感谢
DanSkeel
,您可以在这里找到整个列表
您可以在类类别接口中声明方法:
@interface MyClass (ForwardedMethods)
- (void)doSomething;
@end
(没有该类别的实现)。那么 Xcode 就不会再抱怨“不完整的实现”了。