Objective c 有没有办法将泛型类型参数添加到协议中?

Objective c 有没有办法将泛型类型参数添加到协议中?,objective-c,generics,Objective C,Generics,从Xcode 7开始,Objective-C为类引入了泛型类型参数。有没有办法将泛型与Objective C协议一起使用?我还没有找到一个明显的方法来实现这一点,因为协议(例如,@protocol-MyProtocol)已经采用了与@interface-MyClass等效的方法 示例:我想转换如下代码: @protocol MYObjectContainer - (id)objectAtIndex:(NSUInteger)index; @end @protocol MYObjectContai

从Xcode 7开始,Objective-C为类引入了泛型类型参数。有没有办法将泛型与Objective C协议一起使用?我还没有找到一个明显的方法来实现这一点,因为协议(例如,
@protocol-MyProtocol
)已经采用了与
@interface-MyClass
等效的方法

示例:我想转换如下代码:

@protocol MYObjectContainer
- (id)objectAtIndex:(NSUInteger)index;
@end
@protocol MYObjectContainer
- (ObjectType)objectAtIndex:(NSUInteger)index;
@end
要编写如下代码:

@protocol MYObjectContainer
- (id)objectAtIndex:(NSUInteger)index;
@end
@protocol MYObjectContainer
- (ObjectType)objectAtIndex:(NSUInteger)index;
@end

这在常规类中是可能的(例如,请参阅NSArray)。

如果我正确理解您的意思,您可以:

使用以下命令指定对象应为ObjectType的实例或从ObjectType继承:

@protocol MYObjectContainer
- (__kindof ObjectType *)objectAtIndex:(NSUInteger)index;
@end
@protocol MYObjectContainer
- (CollectionType <ItemType *> *)objectAtIndex:(NSUInteger)index;
@end
使用以下命令指定集合(NSArray、NSSet等)中的项应为ItemType的实例(前缀为“\u kindof”以将其扩展到从ItemType继承的对象):

@protocol MYObjectContainer
- (__kindof ObjectType *)objectAtIndex:(NSUInteger)index;
@end
@protocol MYObjectContainer
- (CollectionType <ItemType *> *)objectAtIndex:(NSUInteger)index;
@end
@协议MyObject容器
-(CollectionType*)对象索引:(NSInteger)索引;
@结束

请注意,Objective-C泛型的设计目的是在不遵守指定类型时提供编译器警告,以防止隐藏的bug。它们实际上不会在运行时强制指定类型。

您能澄清一下您想做什么吗?用一个例子更新你的问题。我猜你不能,因为Objective-C中的类添加了泛型以与Swift接口,而Swift中的协议没有泛型(它们有关联的类型)。对不起,我不理解答案。在第一个选项中,ObjectType从何处获取?没有这样的“类型”,甚至没有伪类型。在第二个示例(从ItemType继承)中,“CollectionType”是什么?“ItemType”是在哪里定义的,还是作为模板给出的?为什么还要编译?