[英]Conforming to a protocol on a class extension
我正在开发一个 Core Data 应用程序,其中我的实体有一个称为deleted
的公共属性(我正在应用程序中实现逻辑删除)。
虽然所有实体都可以从一个公共实体继承,但我想避免它(我不喜欢在使用继承时所有实体最终都在同一个表中,但我离题了)。
为了保持代码整洁,我实现了一个协议:
@protocol SPRLogicalDeleteEntity <NSObject>
@property (nonatomic, retain) NSNumber * deleted;
@end
我希望所有的NSManagedObject
子类都符合这个协议,所以代码看起来更好。 为了使代码可维护,我不想将协议添加到生成的NSManagedObject
子类中,因此,我创建了一个类扩展:
@interface Product () < SPRLogicalDeleteEntity >
@end
我仅用于将实体标记为符合我的协议。
我遇到的问题是对conformsToProtocol:@protocol(SPRLogicalDeleteEntity)
调用返回NO
。
我还没有尝试过 mogenerator(但如果严格要求我可以)。 任何提示? 这可能是因为类扩展是空的,因此没有加载?
我有一个类似的问题,我在那里创建了一个类扩展:
@interface MyClass() <MyProtocol>
@end
MyClass
实例返回NO
conformsToProtocol:@protocol(MyProtocol)
我能够通过使用类别而不是扩展来解决问题:
MyClass+MyProtocol.h
@interface MyClass(MyProtocol) <MyProtocol>
@end
我的课堂+我的协议.m
#import "MyClass+MyProtocol.h"
@implementation MyClass (MyProtocol)
@end
现在我的类的实例为conformsToProtocol:@protocol(MyProtocol)
返回YES
conformsToProtocol:@protocol(MyProtocol)
请注意,有必要包含@implementation MyClass (MyProtocol)
。 最初,我试图只包含头文件,期望<MyProtocol>
声明就足够了,但是<MyProtocol>
conformsToProtocol:
在我为该类别添加@implementation
之前仍然返回NO
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.