Objective c 目标c中的轻量级泛型
我试图用轻量级泛型实现stack类。 但是由于Xcode找不到Objective c 目标c中的轻量级泛型,objective-c,xcode,generics,xcode7,Objective C,Xcode,Generics,Xcode7,我试图用轻量级泛型实现stack类。 但是由于Xcode找不到ObjectType @implementation Stack - (ObjectType)popObject !!!!!!!!!Expected a type { return self.allObjects.firstObject; } @end 这很奇怪,因为头声明没有生成任何错误 @interface Stack<__covariant ObjectType> : NSObject - (Obj
ObjectType
@implementation Stack
- (ObjectType)popObject !!!!!!!!!Expected a type
{
return self.allObjects.firstObject;
}
@end
这很奇怪,因为头声明没有生成任何错误
@interface Stack<__covariant ObjectType> : NSObject
- (ObjectType)popObject;
@property (nonatomic, readonly) NSArray<ObjectType> *allObjects;
@end
@接口堆栈:NSObject
-(ObjectType)popObject;
@属性(非原子,只读)NSArray*allObjects;
@结束
我可以通过将ObjectType
更改为id
来实现它。
是否有更好的方法来修复错误?只是一种假设,但是,如果用
id
替换ObjectType
有效,可能您没有使用指针类型
我的意思是,如果您在某个地方有@interface ObjectType
,那么堆栈中的ObjectType*
在
大括号和方法返回类型中都应该是ObjectType*
如果这不是一个问题,很抱歉误导您,Objective-C泛型实际上是轻量级的,添加它是为了提高与Swift的互操作性,而不是为了使Objective-C代码更安全。与nullability类似,将泛型看作是注释接口的一种方式,而不是更改实现的理由
在实现中将ObjectType
更改为id
,这是最好的方法
进一步阅读:。如果您想了解\uu convarant
NSArray.h
请阅读bob对该文章的评论,使用以下声明:`-(ObjectType)objectAtIndex:(NSUInteger)index;`。不过苹果没有提供实现文件,这是因为ObjectType在这里不仅仅是指向ObjC对象的指针。它可以是<代码> ID >代码>,一些GCD对象,或者核心基础。object@SergiiMartynenkoJr:没错,所以如果ObjectType
是,比如说,NSString*
,那么使用ObjectType*
将扩展到NSString**
,这不是我们想要的<代码>对象类型
似乎是正确的。看起来像是误解。让我们进入较低的抽象层次。比如说,我们有一些@接口
。然后,在堆栈中
应该有@接口堆栈-(Some*)popObject@属性NSArray*所有对象@结束
这是正确的,更清楚地说:实现中不存在泛型,所以不必麻烦更改.m(m)文件。文章链接已断开,替换为与archive.org的链接