Objective C奇怪的IF语法

时间:2016-01-10 05:28:59

标签: objective-c syntax

由于我拥有大部分PHP经验,因此我看到了许多新的语法规则。我接受并理解了他们中的大多数,但有一个对我来说毫无意义。

currentNumber = 0;
self.Label.text = [NSString stringWithFormat:@"%2.0f", result];
if ([sender tag] == 0) result = 0; {
    currentOperation = (int)[sender tag];
}

如您所见,result = 0;之后有一个括号。起初我认为这只是一个捷径,就像[[something alloc]init]一样,但当我重写这样的代码时:

currentNumber = 0;
self.Label.text = [NSString stringWithFormat:@"%2.0f", result];
if ([sender tag] == 0) result = 0; 
else{
    currentOperation = (int)[sender tag];
}

我的应用程序没有按预期运行,即使上面没有语法错误。

所以我的问题是,这种语法是什么意思?如果它甚至可以如何转换为PHP?

2 个答案:

答案 0 :(得分:2)

这不是单个if语句,它是一个if,后跟一个用大括号括起来的语句序列。格式化的更好方法如下:

if ([sender tag] == 0)
    result = 0;

// ---- if statement ends here ----

{
    currentOperation = (int)[sender tag];
}

result = 0是有条件完成的唯一部分;其余的,即

currentOperation = (int)[sender tag];

无条件完成。事实上,条件之后的块可以在没有花括号的情况下重写;这不会改变它的行为:

if ([sender tag] == 0)
    result = 0;
currentOperation = (int)[sender tag];
  

为什么将currentOperation = (int)[sender tag];括在大括号内?

没有必要这样做。目的可能是将result = 0currentOperation = ...括在同一个区块中,但是编写此代码的人犯了错字。

答案 1 :(得分:1)

if ([sender tag] == 0) result = 0; {
    currentOperation = (int)[sender tag];
}

相当于:

if ([sender tag] == 0) { result = 0; } {
    currentOperation = (int)[sender tag];
}

相当于:

if ([sender tag] == 0) { 
    result = 0; 
}
currentOperation = (int)[sender tag];

换句话说,在您的代码中,只有result = 0;是有条件的 - 其余的始终执行。