Как я могу различить одно и то же имя метода двух протоколов в реализации класса? - PullRequest
6 голосов
/ 03 ноября 2011

У меня есть два протокола

@protocol P1

-(void) printP1;

-(void) printCommon;

@end


@protocol P2

-(void) printP2;

-(void) printCommon;
@end

Теперь я реализую эти два протокола в одном классе

@interface TestProtocolImplementation : NSObject <P1,P2>
{

}

@end

Как я могу написать реализацию метода для "printCommon".Когда я пытаюсь сделать реализацию, у меня появляется ошибка времени компиляции.

Есть ли возможность написать реализацию метода для "printCommon".

Ответы [ 2 ]

14 голосов
/ 03 ноября 2011

Общее решение состоит в том, чтобы отделить общий протокол и заставить производные протоколы реализовывать общий протокол, например так:

@protocol PrintCommon

-(void) printCommon;

@end

@protocol P1 < PrintCommon > // << a protocol which declares adoption to a protocol

-(void) printP1;

// -(void) printCommon; << available via PrintCommon

@end


@protocol P2 < PrintCommon >

-(void) printP2;

@end

Теперь типы, которые принимают P1 и P2, должны также принимать методы PrintCommon для выполнения принятия, и вы можете безопасно передавать параметры NSObject<P1>* - NSObject<PrintCommon>*.

2 голосов
/ 03 ноября 2011

для меня работал следующий код:

@protocol P1    

- (void) method1;

@end

@protocol P2

- (void) method1;
- (void) method2;

@end

@interface C1 : NSObject<P1, P2>

@end

@implementation C1

- (void) method1
{
    NSLog(@"method1");
}

- (void) method2
{
    NSLog(@"method2");
}

@end

Пользователь компилятора: Apple LLVM 3.0 Но если вы разрабатываете подобное решение, постарайтесь избегать таких ситуаций.

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