我最近(例如刚刚)升级到XCode 4,我总体上喜欢它,但是,有一件事让我烦恼。
当我写这样的代码时:
if (self = [super init])
{
...
}
它给了我一个'问题':Using the result of an assignment as a condition without parentheses
如何抑制此警告,因为它会以红色突出显示所有文本,让我觉得存在严重错误。由于我是一名经验丰富的Objective-C编码器,我真的不想改变我的做法并在我的初始化陈述中添加额外的括号。
答案 0 :(得分:11)
您可以在if语句中添加一组括号
if ((self = [super init])) {
...
}
或者,你可以像新模板那样做。
self = [super init];
if(self) {
...
}
答案 1 :(得分:3)
我在这里找到了这个问题的答案:if(self = [super init]) - LLVM warning! How are you dealing with it?
其中规定在建筑物设置中添加“-Wno-idiomatic-parentheses”标志。这对我有用。
答案 2 :(得分:3)
您可以在Build设置中取消选中'Missing Braces and Parentheses'(如果您使用GCC4.2或LLVM GCC4.2,则在'GCC 4.2警告'下)。
这相当于aeprius链接的答案,它适用于LLVM 2.0,但不适用于GCC 4.2(已测试)。
据我所知,此警告现在默认打开,以避免分配和测试之间的混淆。
正如Bavarious所指出的here,if(self = [super init]){...}在Objective-C中是惯用的。默认情况下警告已关闭在XCode 3.x中,迁移的项目似乎会自动获得“新默认”;很遗憾在迁移的项目上获得所有这些警告。
至少恢复警告不会使编码比以前在XCode 3.x中更安全。
答案 3 :(得分:2)
双重括号。
if((self = [super init]))
这只是确保你真正了解自己在做什么。
我不确定是否有办法让XC4中的实际警告静音,因为它不是编译器警告。
答案 4 :(得分:1)
将其更改为if((self = [super init])) 这表明编译器是故意的。
答案 5 :(得分:1)
你可以在self = [super init]周围放置另一组parens,或者你可以在条件之前设置self,然后评估为(self)。
答案 6 :(得分:1)
我经常这样做。
self = [super init];
如果(个体) {
}
通过这种方式,任何人都不会被混淆。
答案 7 :(得分:-4)
使用if(self == [self init]).....因为你在条件位置使用赋值运算符“=”....如果语句检查条件....你是在那里分配一个值...使用“==”而不是“=” ......
感谢名单.....