Есть ли у Cocoa @protocol для повторяемых объектов / объектов коллекции? - PullRequest
4 голосов
/ 27 июля 2010

Я пишу API, и я твердо верю в то, чтобы максимально использовать безопасность типов в API. Есть ли @protocol для таких вещей, как NSSet, NSArray и т. Д., Которые помечают его как «повторяемый» в цикле стиля for (foo in bar) {..}? На данный момент у меня есть что-то вроде этого:

- (void) doSomethingWith:(id)someItems;

Когда я хотел бы иметь что-то вроде этого:

- (void) doSomethingWith:(id <NSIterableCollection>)someItems;

Это выполнимо? От этого желания я становлюсь какой-то статичной машинкой, которой негде делать Obj-C? ; -)

Ответы [ 3 ]

8 голосов
/ 27 июля 2010

Объекты, которые хотят поддерживать перечисление с использованием стандартной Objective-C fast enumeration (for..in конструкция), должны реализовывать NSFastEnumeration.NSArray, NSDictionary, NSSet и NSEnumerator принимают этот протокол.

4 голосов
/ 27 июля 2010
3 голосов
/ 27 июля 2010

Это выполнимо, хотя и очень редко. Многие API-интерфейсы Какао не разработаны с учетом этого уровня общности. Но если вы предпочитаете разрабатывать свои API таким образом, у вас есть варианты.

Одним из вариантов является разработка вашего API для использования NSEnumerator, а затем с ним можно использовать любой класс, который может предоставить NSEnumerator.

Другой вариант - использовать все, что соответствует NSFastEnumeration, что позволяет использовать синтаксис for (... in ...) для перечисления коллекции.

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