我在读一本书——大书呆子牧场iOS编程.

你能解释一下如何把这个代码转换成括号符号吗?

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

据我所知,应该是:

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

对吗?

推荐答案

这是个人 Select 的问题.有人认为,点符号使消息发送(方法被调用)变得不明确,因为它看起来就像C风格的 struct 元素访问.另一方面的论点是,点符号更容易打字,更容易阅读,更简洁.

作为一个在引入点符号之前(在Objective-C2.0中)就开始编写Objective-C的人,我可以理解双方的论点,但我更喜欢自己使用点符号.也就是说,我确实认为,对于从Objective-C开始的人来说,理解点符号语法在编译时被转换为标准的访问器方法调用是很重要的.我认为《大书呆子牧场》一书的作者可能也有类似的态度,这也是他们决定在书中使用括号符号的主要原因.

总之,做你最喜欢的事.两者都是有效的,两者之间的 Select 本质上是风格的问题.无论您 Select 哪种,请确保您了解这两种样式都会生成等效的编译代码.

编辑:我忘了回答关于将点符号转换为括号语法的问题.你很接近,但你写的是错误的,不会真正编译.应该是:[[self display] setText:[[[self display] text] stringByAppendingString:digit]].如果我写的话,我会把它分成两行(其实我会用点符号):

NSString *stringWithDigit = [[[self display] text] stringByAppendingString:digit];
[[self display] setText:stringWithDigit];

编辑2:我写这个答案已经三年多了.我只想指出的是,这些天来,越来越多的Apple framework类将以前的常规方法转换为@properties(例如-[NSArray count]),可能是为了更好地进行快速互操作.这让我比以前更自由地使用点符号.

Objective-c相关问答推荐

NSNumberFormatter 和 'th' 'st' 'nd' 'rd' (序数)数字结尾

Objective-C - 将浮点数转换为字符串的其他方法

等到多个网络请求都执行完毕 - 包括它们的完成块

如何测试 NSCFBolean 值?

iPhone:将日期字符串转换为相对时间戳

在从 UIViewController 调用的非保留完成中引用 self 时,weakSelf/strongSelf 舞蹈真的有必要吗?

UIApplication.sharedApplication.delegate.window 和 UIApplication.sharedApplication.keyWindow 有什么区别?

常量的 k 前缀从何而来?

声明变量id和NSObject *有什么区别?

NSView 的边界与框架

`-fembed-bitcode` 和 BITCODE_GENERATION_MODE 有什么区别?

有没有一种简单的方法可以将 ISO8601 时间戳转换为格式化的 NSDate?

通过 ObjC 类别覆盖方法并调用默认实现?

如何在情节提要场景中嵌入自定义视图 xib?

有没有办法更新单个 UITableViewCell 的高度,而无需重新计算每个单元格的高度?

alloc 和 allocWithZone: 有什么区别?

如何将 NSNumber 转换和比较为 BOOL?

AVAssetImageGenerator 提供旋转的图像

有没有办法在不使用 UINavigationController 的情况下更改 Storyboard 中 UINavigationBar 的高度?

UiTextField 中的第一个字母小写