2

当我分配变量而不是检查相等性时,有没有办法可以得到警告?有很多次我不小心分配,而不是比较,如果有警告就好了!

有没有一种方法 Xcode 可以警告我而无需将编码样式更改为:

if (YES == aVariable) {...}
4

2 回答 2

9

如果您在大多数情况下使用=而不是==在语句中,Xcode 已经警告您。if如果您没有收到警告,请告诉我们您使用的 Xcode 版本、您的项目的年龄以及您从默认设置更改了哪些构建设置。

我的测试:我在 Xcode 4.5.2 中创建了一个全新的 iOS 应用程序,并且没有更改任何构建设置。我只是添加了一些代码application:didFinishLaunchingWithOptions:来触发警告。这里是:

使用赋值的结果作为不带括号的条件

您可以通过设置编译器的标志来禁用警告-Wno-parentheses(但为什么要这样做?)。您可以通过在分配周围添加一组额外的括号来抑制特定情况下的警告:

if ((x = 7)) {

有两种情况默认情况下您不会收到警告。首先,在一个init方法中,您可以分配给self,如下所示:

- (id)init {
    if (self = [super init]) {     // no warning by default
    ...

其次,在任何情况下,您都可以分配nextObject选择器的结果,如下所示:

while (object = [enumerator nextObject]) {    // no warning by default

在这些情况下,您可以通过设置编译器的-Widiomatic-parentheses标志来启用警告。

于 2012-11-05T07:47:40.200 回答
1

编译器标志Wparentheses应该可以解决问题。它将强制您在条件中的分配周围放置括号以便编译。Clang 默认设置了这个标志。

于 2012-11-05T07:47:08.203 回答