有没有办法在协议中添加泛型类型参数?

时间:2016-02-02 00:50:23

标签: objective-c generics

从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)。

1 个答案:

答案 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 实际上在运行时强制指定类型。