Кто-либо может сказать мне, что делают угловые скобки" <…>" в интерфейсе класса Obj-C? Как этот … http://snipt.net/robhawkes/cocoa-class-interface
@interface MapMeViewController : UIViewController { ... }
От моего представления они похожи на своего рода описание типа (рассматривающий мой предыдущий опыт в PHP и JavaScript), как мы удостоверяемся MapMeViewController
a CLLocationManagerDelegate
, MKReverseGeocoderDelegate
, MKMapViewDelegate
, или UIAlertViewDelegate
Документация о @interface синтаксисе, кажется, не упоминает это.
Угловые скобки в определении интерфейса класса указывают протоколы, которым соответствует ваш класс.
Протокол почти как интерфейс в Java или C #, с добавлением того, что методы в протоколе Objective-C могут быть необязательными.
Дополнительно в Objective-C вы также можете объявить переменную, аргумент или переменную экземпляра, чтобы соответствовать нескольким протоколам. Пример
NSObject<NSCoding, UITableViewDelegate> *myVariable;
В этом случае класс должен быть NSObject
или подклассом (только NSProxy
и его подклассы не сработают), и он также должен соответствовать обоим NSCoding
] и UITableViewDelegate
протоколы.
В Java или C # это было бы возможно только путем фактического объявления указанного класса.
В документации Apple сообщается об использовании скобок; см. Язык программирования Objective-C в главе 4 «Принятие протокола»
Принятие протокола в некоторых отношениях аналогично объявлению суперкласса. Оба присваивают классу методы. Объявление суперкласса назначает ему унаследованные методы; протокол назначает ему методы, объявленные в списке протоколов. Говорят, что класс принимает формальный протокол, если в своем объявлении он перечисляет протокол в угловых скобках после имени суперкласса:
@interface ClassName: ItsSuperclass <список протоколов>
Категории принимают протоколы почти таким же образом:
@interface ClassName (CategoryName) <список протоколов>
Вы также можете использовать их в коде как приведение, чтобы сообщить компилятору ожидать объект, соответствующий определенному протоколу .
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.noteFetcher sections] objectAtIndex:section];