Цель C - цикл через NSArray, где все объекты наследуются от одного и того же протокола

У меня есть NSArray, в котором все объекты наследуют методы одного и того же протокола. Я хочу сделать что-то вроде:

NSArray* arr =  [NSArray arrayWithObjects:[Type_1 init],[Type_2 init], nil];

for(Protocol *element in arr)
{
  [element do_this];
}

arr — это массив с объектами Type_1 и Type_2, которые наследуются от протокола с именем Protocol.

Проблема в том, что Protocol нельзя использовать в качестве типа в цикле for in. Как мне это решить?


person Klas. S    schedule 30.03.2015    source источник


Ответы (1)


Использовать:

for(id < Protocol > element in arr)

чтобы указать, что объекты относятся к общему типу и реализуют протокол.

В качестве альтернативы вы можете немного «обмануть» и использовать:

[arr makeObjectsPerformSelector:@selector(do_this)];

(не предоставляет никаких проверок).

person Wain    schedule 30.03.2015