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从Xcode 4.5开始,code>将不再需要合成属性。话虽如此,我添加了@synthesis
,效果很好!奇怪的谢谢。如果你不喜欢无限循环,就不要使用它。@Logan除非你喜欢无限循环。这个问题是4年前回答的,你的答案与公认的答案几乎相同。我是从一个与你非常相似的最新问题来到这里的你的。我刚看到那家伙在网上挂了个链接。无论如何,对不起,如果我打扰了你,我会留下我的答案,如果有人没有看到链接,并阅读这里的一些解释。谢谢你的评论。