可能重复:
What's the difference between dot syntax and square bracket syntax?
我尝试过使用这两个表达式:
[[[self display] text] stringByAppendingFormat:digit];
self.display.text = [self.display.text stringByAppendingFormat:digit]
其中display
是UILabel
而digit
是NSString
。
我打算将digit
设置为标签的text
,但是当我尝试运行该程序时,只有#2给出了正确的结果。
那么这两个表达的区别到底是什么?使用方括号作为getter和setter是不正确的吗?
我检查了这个类似的问题, What's the difference between dot syntax and square bracket syntax?,但仍然无法理解。
答案 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];
希望它会有所帮助
沙尼