Dvo*_*ole 33 objective-c notation
我正在读一本书 - Big Nerd Ranch iOS编程.它说不建议使用点符号,因为它会混淆代码.我正在同时观看适用于iOS编程的斯坦福课程,并在其中广泛使用点符号.你会推荐什么?我个人更倾向于括号表示法.
您能解释一下如何将此代码转换为括号表示法吗?
self.display.text = [self.display.text stringByAppendingString:digit];
Run Code Online (Sandbox Code Playgroud)
据我所知,它应该是:
[[self display] setText]:[[[self display] text] stringByAppendingString:digit];
Run Code Online (Sandbox Code Playgroud)
这是对的吗?
And*_*sen 53
这是个人选择的问题.有些人认为点符号使得不清楚消息被发送(方法被调用),因为它看起来就像C风格的结构元素访问.论证的另一面是点符号更容易键入,更容易阅读,更简洁.
作为一个在编写点符号之前编写Objective-C的人(在Objective-C 2.0中),我可以理解双方的论点,但更喜欢自己使用点符号.也就是说,我认为对于从Objective-C开始的人来说,了解点编号语法在编译时转换为标准访问器方法调用非常重要.我认为Big Nerd Ranch书的作者可能也有类似的态度,这也是他们决定在书中使用括号表示法的重要原因.
简而言之,做你最喜欢的事.两者都是有效的,两者之间的选择基本上是一种风格问题.无论您选择哪种,请确保您了解这两种样式都会产生等效的编译代码.
编辑:我忘了回答关于将点表示法转换为括号语法的问题.你很亲密,但你写的是错的,实际上不会编译.它应该是:[[self display] setText:[[[self display] text] stringByAppendingString:digit]]
.如果我正在写它,我会把它分成两行(好吧,我真的用点符号):
NSString *stringWithDigit = [[[self display] text] stringByAppendingString:digit];
[[self display] setText:stringWithDigit];
Run Code Online (Sandbox Code Playgroud)
编辑2:我写这个答案已经超过3年了.我只是想注意,现在,更多的Apple框架类已经将以前常规方法转换为@properties(例如-[NSArray count]
)的东西推测为更好的Swift互操作.这让我比以前更加自由地使用点符号.
Nos*_*tap 10
这是我的意见:
在处理属性时,应始终使用点表示法.不仅写入速度更快(self.foo比[short foo]更少的字符),更重要的是它使链接的消息更容易理解.例如:
self.myTextField.text.length
比起来更容易理解
[[[self myTextField] text] length]
此外,它使你不太可能搞乱标点符号(确保你有正确数量的括号通常是一个痛苦).
但是,正如其他人在上面所说,最终是个人意见.
我知道这是一个老帖子,但我想补充一个更现代的答案.
随着swift的发布和我们最喜欢的语言即将消亡,偏好应该倾向于点符号.所有iOS框架都更新了它们的API以支持点表示法(更喜欢标题中的只读属性到getter).这使得最终的翻译变得更加流畅.
需要明确的是,首选属性来显示暴露getter和/或setter的实例.幸运的是,Xcode的现代objective-c迁移工具将为您完成大部分工作.
归档时间: |
|
查看次数: |
15916 次 |
最近记录: |