假设我定义了自己的协议(protocol)并将其命名为 NeighborNodeListener。 我有 NSMutableArray 来保存实现协议(protocol)的对象。 现在,我想遍历 NSMutalble 数组并为数组中的所有对象调用协议(protocol)中定义的方法之一。
for(id <NeighborNodeListener> object in listeners){
[object firstMethod];//first method is defined in the protocol
}
我正在考虑做一些这样的事情,但没有成功。 我想在 Objective C 中执行的代码在 Java 中看起来像这样
List<NeighborNodeListener> listeners = new ArrayList<NeighborNodeListener>();
Iterator<NeighborNodeListener> iter = listeners.iterator();
while (iter.hasNext()) {
iter.next().firstMethod();
}
最佳答案
Objective-C 在类型方面不如 Java 严格,因此您需要在运行时进行检查。
请注意,下面的两个代码块做同样的事情——除了第一个检查 object
是否完全符合协议(protocol),而后者只检查你想调用的方法.
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"];
}
}
关于objective-c - Objective-C ,关于遍历协议(protocol)变量的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5293453/