【发布时间】:2013-12-23 21:43:16
【问题描述】:
我在我创建的一个类上有一个类别,并且该类别符合协议,该协议在其实现中需要一个属性。但是,因为我在一个类别中,所以我无法在类别的实现中综合属性。因此,我对如何实现 setter 方法感到困惑(当我将协议的属性保持为只读时,它可以正常工作,因为我只需要一个访问器方法)。
这是我的协议:
@protocol SomeProtocol <NSObject>
@property (nonatomic) BOOL didDisplayRecommendation;
@end
我知道如果我这样做我会得到一个无限循环:
- (void)setDidDisplayRecommendation:(BOOL)didDisplayRecommendation
{
self.didDisplayRecommendation = didDisplayRecommendation;
}
但是当我尝试这个时,我得到一个编译器错误:
- (void)setDidDisplayRecommendation:(BOOL)didDisplayRecommendation
{
_didDisplayRecommendation = didDisplayRecommendation;
}
请注意,didDisplayRecommendation 是协议中的属性。解决这个问题的最佳方法是什么?提前致谢!
【问题讨论】:
-
不是重复的,没有解决符合协议的问题
-
您可以在具有 (at)property (nonatomic,retain) MyClass *anObject 的类别中添加“特殊”属性 - 但在实现文件中,您所能做的就是 (at)dynamic anObject,然后,您可以使用关联引用函数来伪装其他对象来代替该属性。它有效,但不是解决方法,您可以在商业应用程序中执行此操作,并且它通过了实现协议检查。
标签: ios objective-c properties protocols objective-c-category