【问题标题】:Why is capitalized property name not giving an error in Objective-C / UITouch?为什么大写的属性名称在 Objective-C / UITouch 中没有给出错误?
【发布时间】:2013-03-14 13:38:21
【问题描述】:

resultLabelUILabel。那为什么呢

 resultLabel.Text= @"";

不报错?应该是resultLabel.text

感谢您提供任何见解。

【问题讨论】:

  • 好问题,当我这样做时,它会像函数一样突出显示它,很奇怪......
  • 可能只是因为编译器相当聪明。除非您碰巧有一个函数或称为 Text 的东西,否则它只会假定您的意思是“文本”。
  • resultLabel.Text 是如何声明的?
  • @MarkBernstein OP 说这是一个常规的 UILabel

标签: objective-c properties capitalization


【解决方案1】:

属性foo 的默认设置函数是setFoo:,第一个字母大写。因此这两行

resultLabel.text = @"";
resultLabel.Text = @"";

生成相同的代码

[resultLabel setText:@""];

这仅适用于 setter 函数,不适用于 getter:

NSString *x = self.text; // --> x = [self text]
NSString *x = self.Text; // --> x = [self Text]

因此,您不能有两个仅在第一个字母的情况下不同的读写属性,这将产生编译器错误:

@property (nonatomic, strong) NSString *text;
@property (nonatomic, strong) NSString *Text;

self.text = @"foo";
// error: synthesized properties 'text' and 'Text' both claim setter 'setText:'

【讨论】:

  • 现在我们可以使用 InitWithString:, AddObjectAtIndex: 了吗?
  • @AnoopVaidya: initWithString 等不是属性,所以这不起作用。
  • 乍一看,Objective-C 似乎一直不区分大小写。 [我只注意到它,因为一个学生写了 .Text 和 Xcode 批准。] 感谢您的解释!
  • @MichaelRogers:我不会说 Obj-C 通常不区分大小写。但是对于键值编码中的属性甚至更多,某些含义与方法名称相关联,这是歧义的来源。
  • 这是编译器中的一个错误。请归档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 2010-10-25
  • 2017-06-29
相关资源
最近更新 更多