Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标c中的轻量级泛型_Objective C_Xcode_Generics_Xcode7 - Fatal编程技术网

Objective c 目标c中的轻量级泛型

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

我试图用轻量级泛型实现stack类。 但是由于Xcode找不到
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的链接