从Xcode 7开始,Objective-C为类引入了泛型类型参数。有没有办法将泛型与Objective C协议一起使用?我没有找到一种明显的方法来执行此操作,因为已经为协议采用了等效于@interface MyClass<ObjectType>
的内容(例如@protocol MyProtocol<NSObject>
)。
示例:我想转换这样的代码:
@protocol MYObjectContainer
- (id)objectAtIndex:(NSUInteger)index;
@end
代码如下:
@protocol MYObjectContainer
- (ObjectType)objectAtIndex:(NSUInteger)index;
@end
常规课程可以实现(例如,参见NSArray)。
答案 0 :(得分:3)
如果我正确理解你所说的话,你可以:
使用以下命令指定对象应该是 的实例或从 ObjectType继承:
@protocol MYObjectContainer
- (__kindof ObjectType *)objectAtIndex:(NSUInteger)index;
@end
指定集合中的项(NSArray,NSSet等)应该是 ItemType的实例(前缀为'__kindof'以将其扩展到对象使用:
从ItemType继承@protocol MYObjectContainer
- (CollectionType <ItemType *> *)objectAtIndex:(NSUInteger)index;
@end
请注意,Objective-C泛型旨在通过在不遵守指定类型时提供编译器警告来防止隐藏的错误。它们 not 实际上在运行时强制指定类型。