任何人都可以告诉我尖括号“< ...>”在一个Obj-C类接口吗?像这样...... http://snipt.net/robhawkes/cocoa-class-interface
@interface MapMeViewController : UIViewController <CLLocationManagerDelegate,
MKReverseGeocoderDelegate, MKMapViewDelegate, UIAlertViewDelegate> { ... }
从我看来,它们看起来像某种类型声明(考虑到我以前的PHP和JavaScript经验),就像我们确保MapMeViewController
是CLLocationManagerDelegate
,MKReverseGeocoderDelegate
一样, MKMapViewDelegate
或UIAlertViewDelegate
关于@interface语法的文档似乎没有提到这一点。
答案 0 :(得分:35)
类接口定义中的尖括号表示您的类符合的协议。
协议几乎就像Java或C#中的接口,并且Objective-C协议中的方法可以是可选的。
另外,在Objective-C中,您可以声明变量,参数或实例变量以符合多个协议。实施例
NSObject<NSCoding, UITableViewDelegate> *myVariable;
在这种情况下,类必须是NSObject
或子类(仅NSProxy
且其子类将失败),并且它还必须符合NSCoding
和UITableViewDelegate
协议
在Java或C#中,这只能通过实际声明所述类来实现。
答案 1 :(得分:9)
尖括号表示protocol。它们类似于其他语言的接口。
答案 2 :(得分:6)
您也可以在类似转换的代码中使用它们,以告诉编译器期望符合特定协议的对象。
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.noteFetcher sections] objectAtIndex:section];
答案 3 :(得分:4)
Apple文档报告使用括号;请参阅第4章“采用议定书”的The Objective-C Programming Language。
采用协议在某些方面类似于声明超类。两者都为类分配方法。超类声明为其分配继承的方法;协议为协议列表中声明的方法分配它。如果一个类在其声明中列出了超类名后的尖括号内的协议,则称该类采用正式协议:
@interface ClassName : ItsSuperclass < protocol list >
类别以相同的方式采用协议:
@interface ClassName ( CategoryName ) < protocol list >