Использование объявления делегата в нескольких классах - PullRequest
1 голос
/ 07 января 2011

Допустим, у меня есть класс ClassA, который объявляет протокол в ClassA.h:

@protocol SomeProtocol

- (void)myMethod;

@end

Теперь, допустим, у меня также есть класс ClassB. Я действительно хотел бы использовать SomeProtocol в ClassB так:

#import ClassA.h

@interface ClassB : NSObject
{
    id <SomeProtocol> someObject;
}

но компилятор постоянно говорит мне, что он "не может найти объявление протокола для" SomeProtocol ".

Есть идеи о том, чего мне не хватает?

Ответы [ 2 ]

3 голосов
/ 07 января 2011

Измените ваш ClassB, чтобы он выглядел следующим образом:

@protocol SomeProtocol;

@interface ClassB : NSObject
{
    id <SomeProtocol> someObject;
}

Просто для пояснения, использование такой директивы @protocol просто сообщает компилятору, что SomeProtocol является протоколом, который будет определен позже.Это просто прямая ссылка на протокол без необходимости импортировать интерфейс, в котором он определен.

Дополнительную информацию можно найти здесь (в самом низу): http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProtocols.html

2 голосов
/ 08 января 2011

Вы также можете поместить протокол в SomeProtocol.h (его собственный файл заголовка) и импортировать его как из класса A, так и из класса B.

Если вы не импортируете протокол, вы не получите хороших предупреждений во время компиляции, сообщающих, когда вы делаете ошибку, вызывая его ...

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