使用点语法作为getter是错误的吗?

时间:2011-01-20 10:50:05

标签: iphone objective-c ios getter-setter

我知道的。是setter的快捷方式。有时候,我使用那种代码:

cell.textLabel.text = [NSString stringWithFormat:@"this is row %i", indexPath.row];

这可以按预期工作,但我想知道,是否更好(或者更正确?)写

cell.textLabel.text = [NSString stringWithFormat:@"this is row %i", [indexPath row]];

或者,换句话说,我应该只使用带有=运算符的点语法,比如

aTextField.text = @"whatever";

欢迎任何链接/文档,谢谢:)

PS。如果您没有看到标签,我在这里谈论iOS。

5 个答案:

答案 0 :(得分:6)

Dot(。)不仅是setter的快捷方式,也是getter的快捷方式。你也可以使用dot作为getter。没有问题,这也不是坏习惯。从Obj-C 2.0 programming guide开始,“您可以使用点语法来使用与访问结构元素相同的模式来调用访问器方法。点语法纯粹是”语法糖“。请注意,它是关于访问器方法,而不仅仅是setter。

答案 1 :(得分:4)

这是一个品味问题。

由于各种原因,我不想使用点语法:

  • 使用点语法时,仅查找代码中设置值的位置要困难得多。搜索setValue:比搜索.value

  • 容易得多
  • 作为一名长期的C程序员,我的大脑有点将点语法与访问struct成员联系起来。我觉得很难习惯不同范围内的点语法。

  • setXY:语法close更接近自然语言。使阅读别人的代码变得更加容易。

答案 2 :(得分:3)

“”。是访问@property的快捷方式(顺便说一下, readonly )。从语法的角度来看,这是一个getter还是setter取决于操作数位置:

self.enabled = NO; // setter
BOOL isEnabled = self.enabled; // getter
self.selected = self.enabled = NO; // this is OK too

答案 3 :(得分:1)

这是编码风格所以两者都没有更好。

我会注意到两件事。

作为很长一段时间,Objective C代码我更喜欢[indexPath行],因为它与代码的其余部分一致,对于一个集合,我会使用[aTextField setText:@“whatever”]

但如果你需要使用。关键路径的表示法通过同一段代码中的方法表示法访问相同的变量看起来很奇怪。

Apple documentation

  

Objective-C提供了一个点(。)运算符,它提供了一种紧凑而方便的语法,您可以使用它作为方括号表示法([] s)的替代方法来调用访问器方法。

  

myInstance.value = 10;
printf("myInstance value: %d", myInstance.value);
  

点语法纯粹是“语法”   糖“ - 由...转化   编译器调用accessor   方法(所以你实际上并非如此   访问实例变量   直)。上面的代码示例是   完全等同于以下内容:

[myInstance setValue:10]; printf("myInstance value: %d", [myInstance value]);

答案 4 :(得分:-2)

使用点语法不是编码风格或品味问题!

点语法用于访问属性。消息发送语法用于调度方法。它们在概念上是两个不同的东西。不幸的是,遗留和向后兼容Objective-C 1.0使它们可以互换,这引起了很多混乱。

用户使用dot-syntax的天气很简单:

  • 如果公开标头声明某些内容为属性,则使用 dot-syntax 将其作为属性访问,作为界面明确指定的作者!
  • 如果公开标题声明某些内容为方法,则使用消息发送语法访问它,作为界面明确指定的作者!
  • 使 NO 例外。

难的问题是,如果您将某些内容声明为属性,并告诉您的客户应该使用doit-syntax,还是应该声明一个方法?简单的答案是:

  • 使用状态属性 (是某种东西)
  • 使用行为的方法 (执行/计算某些内容)

另一个经验法则是属性应该是自包含的,不应该有其他方法来更改属性的值,而是设置属性本身。这不是一个硬性规则,使用常识,存在许多明智的例外。例如,可以使用hidden方法更改setHidden:animated:属性。