我有一个基类实现的协议。我有要为其强制执行协议的子类。
@class JSData;
@protocol JSDataProtocol <NSObject, NSCopying, NSMutableCopying>
@property (nonatomic, readonly) NSString *dataType;
@property (nonatomic, readwrite) id value;
- (JSData *)value;
- (BOOL)hasMeta;
// ...
@end
基类是
@interface JSData : NSObject <JSDataProtocol, JSHashable, JSEquatable>
@end
然后我要创建其他类,例如
@interface JSSymbol: JSData
- (NSString *)name;
- (JSData *)value;
@end
但是这里的问题是因为JSData
符合JSDataProtocol
,如果我错过了在JSSymbol
中实现某些方法的情况,Xcode不会显示任何警告,并且会出现运行时错误。有没有一种方法可以强制JSSymbol
实现JSDataProtocol
中定义的所有方法?
答案 0 :(得分:3)
JSSymbol
源自JSData
,后者已经实现了JSDataProtocol
方法。因此,否,您不会因未实现这些方法而遇到编译时错误。
如果您真的想要这个,可以:
JSDataProtocol
的声明从JSData
移到具体的类。JSData
,并使JSDataProtocol
从JSHashable
和JSEquatable
继承如果您摆脱了JSData
,则可以将协议定义简化为:
@protocol JSDataProtocol <NSObject, NSCopying, NSMutableCopying,
JSHashable, JSEquatable>
@property (nonatomic, readonly) NSString *dataType;
@property (nonatomic, readwrite) id<JSDataProtocol> value;
@property (nonatomic, readonly) BOOL hasMeta;
@end