if语句中的异常条件表达式

时间:2013-12-07 08:06:40

标签: objective-c

- (IBAction)touchCardButton:(UIButton *)sender
{
   if ([sender.currentTitle length]) {

      UIImage *cardImage = [UIImage imageNamed:@"cardback"];
      [sender setBackgroundImage:cardImage forState:UIControlStateNormal];

      [sender setTitle:@"" forState:UIControlStateNormal];
      }
}

据我所知,如果[sender.currentTitle length]非零,if语句将继续。然而,这里涉及的语法令我感到困惑。

[sender currentTitle] 

或在dot.syntax

sender.currentTitle

检查“发件人”按钮的标题。但这里的长度是多少?长度是一种方法吗?长度是否返回值?它是否相当于:

[[sender currentTitle] length] 

2 个答案:

答案 0 :(得分:3)

这没什么不寻常的。

sender.currentTitle返回一个NSString,它是按钮的标题。如您所知,这相当于[sender currentTitle]。在这两种情况下,您都在currentTitle上调用sender方法。因此,[sender.currentTitle length]调用NSString上的length方法,该方法是currentTitle上调用sender的结果,并返回一个字符串长度的NSUInteger。

另一种写作方式是:

NSString *title = sender.currentTitle;
if ([title length] > 0) {
  // Do something if the length is not zero.
}

或进一步细分:

NSString *title = sender.currentTitle;
NSUInteger length = [title length];
if (length > 0) {
  // Do something if the length is not zero.
}

如果你只是这样做了:

if ([sender currentTitle]) {
  // Do something if the string is not nil.
}

如果按钮的currentTitle不是nil,那么你的条件是真的,与长度>相同0

答案 1 :(得分:0)

在Objective-C中,.只是用于调用setter / getter的语法糖,它不是像Swift中那样的字段访问器(这个问题早于Swift吗?)。

在您的代码段中,调用currentTitle的getter,并在该字符串上调用length方法。