Objective-C немного менее строг, чем Java, с точки зрения типизации, поэтому вам нужно проверять во время выполнения.
Обратите внимание, что два приведенных ниже кодовых блока делают одно и то же - за исключением того, что первый проверяет object
на полное соответствие протоколу, тогда как последний просто проверяет метод, который вы хотите вызвать.
for (id object in listeners)
{
if ([object conformsToProtocol:@protocol(myProtocol)])
{
[object firstMethod];//first method is defined in the protocol
}
else
{
[NSException raise:NSInternalInconsistencyException format:@"objects in the listeners array must confirm to myProtocol"];
}
}
Или
for (id object in listeners)
{
if ([object respondsToSelector:@selector(firstMethod)])
{
[object firstMethod];//first method is defined in the protocol
}
else
{
[NSException raise:NSInternalInconsistencyException format:@"objects in the listeners array must confirm to myProtocol"];
}
}