Цель C: Расширения класса и предупреждения о соответствии протокола - PullRequest
3 голосов
/ 13 марта 2010

У меня большой класс, который я разделил на несколько файлов расширений классов для удобства чтения.

@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

Ответы [ 4 ]

14 голосов
/ 13 марта 2010

Используйте категорию для каждой реализации протокола. Я использую это, когда у меня есть сложные 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

Затем я беру все заголовки для определения основного класса и категории и объединяю их в один заголовок, который затем импортирую, где мне нужно использовать класс.

4 голосов
/ 13 марта 2010
@interface MyClass : NSObject
@end

@interface MyClass (RequiredExtension) <MyProtocol>
-(void)required;
@end

Принять протокол в категории.

1 голос
/ 26 ноября 2011

Вам не нужно менять свой стиль кодирования. Чтобы обойти предупреждение, нужно только реализовать «обязательный» метод протокола, а не «необязательный»

1 голос
/ 13 марта 2010

Если это только для удобства чтения, вы должны использовать только категории. В этом случае протокол не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...