0

可能重复:
点语法和​​方括号语法有什么区别?

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

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

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

哪里display是一个UILabeldigit是一个NSString

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

那么这两种表达方式到底有什么区别呢?对 getter 和 setter 使用方括号是否不正确?

我检查了这个类似的问题, 点语法和方括号语法有什么区别?,但仍然无法弄清楚。

4

2 回答 2

4

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

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

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

不过,我建议使用临时变量来使内容更具可读性:

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

另请注意,您应该将格式字符串作为stringByAppendingFormat:. 如果您的digit字符串中不小心包含任何格式说明符,则会导致崩溃。这里更好的选择是stringByAppendingString:—— [oldText stringByAppendingString:digit]

于 2011-12-06T09:48:19.920 回答
2

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

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

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

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

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

希望它会有所帮助

沙尼

于 2011-12-06T09:53:54.897 回答