我有一个大类,为了便于阅读,我将其分为几个不同的类扩展文件。
@protocol MyProtocol
@required
-(void)required;
@end
@interface MyClass : NSObject <MyProtocol>
@end
@interface MyClass (RequiredExtension)
-(void)required;
@end
在没有编译器警告的情况下,有更好的方法吗?
warning: class 'MyClass' does not fully implement the 'MyProtocol' protocol
答案 0 :(得分:14)
为每个协议实施使用类别。当我有复杂的viewControllers时,我会使用它。
例如,我有一个实现NSTextDelegate协议的类别。
所以,MyComplexViewController + NSTextDelegate.h:
#import "MyComplexViewController.h"
@interface MyComplexViewController (NSTextDelegate) <NSTextDelegate>
@end
和MyComplexViewController + NSTextDelegate.m:
#import "MyComplexViewController+NSTextDelegate.h"
@implementation MyComplexViewController (NSTextDelegate)
- (BOOL)textShouldBeginEditing:(NSText *)textObject{
...
}
- (BOOL)textShouldEndEditing:(NSText *)textObject{
...
}
- (void)textDidBeginEditing:(NSNotification *)notification{
...
}
- (void)textDidEndEditing:(NSNotification *)notification{
...
}
- (void)textDidChange:(NSNotification *)notification{
....
}
@end
然后我获取主类定义和类别的所有标题,并将它们组合成一个标题,然后我导入我需要使用该类的位置。
答案 1 :(得分:4)
@interface MyClass : NSObject
@end
@interface MyClass (RequiredExtension) <MyProtocol>
-(void)required;
@end
采用该类别中的协议。
答案 2 :(得分:1)
如果这只是为了便于阅读,则应仅使用类别。在这种情况下不需要协议。
答案 3 :(得分:1)
您无需更改编码风格。要绕过警告,它只需要实现协议的“必需”方法,而不是“可选”