Ios 属性不能与getter和setter一起使用

Ios 属性不能与getter和setter一起使用,ios,properties,Ios,Properties,我定义了一个属性 @property (nonatomic, strong) NSArray *eventTypes; 我想覆盖getter和setter 我写了这个 - (void)setEventTypes:(NSArray *)eventTypes { _eventTypes = eventTypes; //do some stuff here. } 这很好,但当我再加上这个 - (NSArray*)eventTypes { //do some stuff h

我定义了一个属性

@property (nonatomic, strong) NSArray *eventTypes;
我想覆盖getter和setter

我写了这个

- (void)setEventTypes:(NSArray *)eventTypes
{
    _eventTypes = eventTypes;

    //do some stuff here.
}
这很好,但当我再加上这个

- (NSArray*)eventTypes
{
    //do some stuff here.

    return _eventTypes;
}
然后这两个函数都会显示错误,并且不知道什么是事件类型

这两方面都是一样的。它可以使用一个函数,但一旦我添加了另一个函数,这两个函数都会失败


我还需要做些什么吗?似乎奇怪的是,它可以与任何一个bot一起工作,而不是同时与两个bot一起工作。

@implementation

@synthesize eventTypes = _eventTypes;

尽管LLVM将自动合成支持ivar(默认情况下以下划线作为前缀),但在同时实现getter和setter方法的情况下,您将不会获得自动合成ivar,这就是为什么您必须
@synthesis eventTypes=\u eventTypes手动

您可以在此处阅读更多信息:

试试这个:

- (void)setEventTypes:(NSArray *)eventTypes
{
    self.eventTypes = eventTypes;

    //do some stuff here.
}
- (NSArray*)eventTypes
{
    //do some stuff here.

    return self.eventTypes;
}

你必须“合成”你的财产。当我们想要创建自定义的getter和setter时,我们使用它,例如:

  • 具有自定义getter和setter的读/写属性
  • 具有自定义getter的只读属性
在.m文件中的@实现之后添加:

@synthesize propertyName = _propertyName;
这会告诉编译器您希望获得该特定属性的“get”和“set”方法的控制权。因此,在这之后,set和get的实现将很好地工作


额外解释:

self.anyString=@“TEXT”;完全等同于[self-setAnyString:@“TEXT”]
这两个都在调用方法集。如果使用\u anyString,则直接访问属性,而无需通过set方法


因此,如果我们在set方法内部调用self.property,我们将创建一个无限循环。一旦我们重写了方法“set”和“get”,我们就必须使用\uu而不是self。

您的类中定义了
\u事件类型吗?以及在头文件中声明变量所需的属性。此外(我对此不是100%确定),即使您正在编写自己的getter和setter(这样,getter和setter会覆盖合成的getter和setter),您也可能需要在该属性上使用
@synthetic
@synthetic eventTypes=\u eventTypes将不再需要合成属性。话虽如此,我添加了
@synthesis
,效果很好!奇怪的谢谢。如果你不喜欢无限循环,就不要使用它。@Logan除非你喜欢无限循环。这个问题是4年前回答的,你的答案与公认的答案几乎相同。我是从一个与你非常相似的最新问题来到这里的你的。我刚看到那家伙在网上挂了个链接。无论如何,对不起,如果我打扰了你,我会留下我的答案,如果有人没有看到链接,并阅读这里的一些解释。谢谢你的评论。