Изготовление класса соответствует протоколу с категорией для существующих методов

У меня есть протокол по имени MyProtocol. MyProtocol имеет необходимый метод:

- (NSUInteger)length;

и некоторые другие методы.

Теперь я хочу сделать класс NSString, соответствующий MyProtocol с категорией. Вроде так:

@interface NSString (NSStringWithMyProtocol) <MyProtocol>
@end

В этой категории я реализую все методы, исключая метод «длины», поскольку я хочу исходную реализацию NSString. Я не хочу переопределять его в этом конкретном классе.

Теперь я получаю предупреждение из-за неполной реализации MyProtocol в категории.

Я знаю, что есть несколько решений для решения этого.

  1. Сделайте метод необязательным
  2. Swimzling
  3. , добавляя подкласс в класс, который соответствует протоколу. Затем оставьте реализацию.

Я не хочу использовать эти варианты, потому что они приводят к плохому дизайну для остальной части моего кода.
Вариант 3 плохой, из-за существующих прямых подклассов не будет соответствовать протоколу.

Кто-нибудь знает, как удалить предупреждение без реализации метода длины?

Примечание: Класс, категория и протокол являются лишь примерами. Я столкнулся с этой проблемой с другими классами, о которых я не мог публиковать. Спасибо

Редактировать: добавлен третий вариант.

Полный код:

Протокол:

@protocol MyProtocol <NSObject>

- (void) myMethod;
- (NSInteger) length;

@end

Заголовок категории:

#import <Foundation/Foundation.h>
#import "MyProtocol.h"

@interface NSString (MyProtocol) <MyProtocol>
@end

Реализация категории:

@implementation NSString (MyProtocol)

- (void)myMethod {

}

@end

Это приводит к следующим предупреждениям.

Incomplete implementation

Method in protocol not implemented

На этом скриншоте вы можете увидеть мое предупреждение: Screen shot

Я пытался компилировать LLVM GCC 4.2 и компилятор Apple LLVM 3.0. Я также скомпилировал на XCode 4.0.2 и XCode 4.2. Я на ОС х 10,6,8.

13
задан Mats Stijlaart 2 September 2011 в 08:14
поделиться