【问题标题】:Why can't I implement a custom setter and a custom getter at the same time in Objective-C? [duplicate]为什么我不能在 Objective-C 中同时实现自定义 setter 和自定义 getter? [复制]
【发布时间】:2014-07-28 00:52:57
【问题描述】:

我的问题很简单,希望能尽快得到答案。

我正在编写一个 iPhone 应用程序,在我的一个对象上我有一个名为“text”的属性。在实现文件中,我编写了一个自定义设置器:

- (void) setText: (NSString*) text
{
    _text = text;
    self.textField.text = text;
}

在我尝试实现 getter 之前,这一切正常:

- (NSString*) text
{
    return self.textField.text;
}

在我写完之后,编译器开始抱怨 setter 的第一行:

_text = text;

说“使用未声明的标识符 _text;您的意思是“文本”吗?

没有。我不是指文字。我的意思是_text。 是什么意思哦,强大的编译器?

【问题讨论】:

  • 当同时覆盖setter和getter时,需要手动进行@synthesize,不会自动完成。所以,在你合成它之前,_text 是不存在的。
  • 编译器意味着您正在使用未声明的标识符。 _text 未声明。如果你同时实现 getter 和 setter,编译器不会为你声明实例变量,你必须自己做。那是因为通常您不需要实例变量。为什么这里需要一个?

标签: ios objective-c compiler-construction setter undeclared-identifier


【解决方案1】:

该类是否有一个名为_text 的类型为NSString* 的ivar(成员变量)?使用手动 getter 和 setter,而不是 @synthesizing 它们,您需要显式声明一个。

在类接口定义中引入:

@interface MyClass
{
    //more ivars

    NSString *_text;
}
//methods and properties...
@end

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    相关资源
    最近更新 更多