使用点语法的语句产生预期结果,但括号语法不产生

时间:2011-12-06 09:44:17

标签: objective-c syntax properties square-bracket

  

可能重复:
  What's the difference between dot syntax and square bracket syntax?

我尝试过使用这两个表达式:

  1. [[[self display] text] stringByAppendingFormat:digit];

  2. self.display.text = [self.display.text stringByAppendingFormat:digit]

  3. 其中displayUILabeldigitNSString

    我打算将digit设置为标签的text,但是当我尝试运行该程序时,只有#2给出了正确的结果。

    那么这两个表达的区别到底是什么?使用方括号作为getter和setter是不正确的吗?

    我检查了这个类似的问题, What's the difference between dot syntax and square bracket syntax?,但仍然无法理解。

2 个答案:

答案 0 :(得分:4)

这两种语法完全相同。点语法由编译器转换为括号语法。您遇到的问题是您没有在第一个代码段中设置该值。如果您将其更改为:

[[self display] setText:[[[self display] text] stringByAppendingFormat:digit]];

您将看到与点相同的结果。

我建议使用临时变量来使事情更具可读性:

NSString * oldText = [[self display] text];
[[self display] setText:[oldText stringByAppendingFormat:@"%@", digit]];

另请注意,您应该format string作为stringByAppendingFormat:的第一个参数。如果您的digit字符串意外地有任何格式说明符,则会导致崩溃。这里更好的选择是stringByAppendingString: - [oldText stringByAppendingString:digit]

答案 1 :(得分:2)

基本上它们之间没有区别。

我不知道你是否神秘地删除了一些代码,但是当你使用时 -

  [[[self display] text] stringByAppendingFormat:digit];

您尚未将表达式结果分配给变量。你应该:

   self.display.text = [[[self display] text] stringByAppendingFormat:digit];

希望它会有所帮助

沙尼