objective c 中的轻量级泛型

lightweight generics in objective c

我正在尝试使用轻量级泛型实现堆栈 class。 但是代码编译失败,因为Xcode找不到ObjectType

的定义
@implementation Stack
- (ObjectType)popObject     !!!!!!!!!Expected a type
{
    return self.allObjects.firstObject;
}
@end

这很奇怪,因为 header 声明没有产生任何错误。

@interface Stack<__covariant ObjectType> : NSObject
- (ObjectType)popObject;
@property (nonatomic, readonly) NSArray<ObjectType> *allObjects;
@end

我可以通过将 ObjectType 更改为 id 来使其工作。 有没有更好的方法来修复错误?

只是一个假设,但是,如果将 ObjectType 替换为 id 有效,也许您使用的不是指针类型?

我的意思是,如果你在某个地方有 @interface ObjectType,那么在你的 Stack 中它应该是 ObjectType*<...> 大括号和方法 return 中类型

如果不是问题,请原谅误导

Objective-C 泛型确实是轻量级的,添加它是为了提高与 Swift 的互操作性,而不是为了使 Objective-C 代码更安全。与可空性类似,将泛型视为一种注释接口的方式,而不是更改实现的原因。

在实施中将 ObjectType 更改为 id 是最好的前进方式。

进一步阅读:article on Objective C Generics。如果您想了解 __covariant.

,请阅读 bob 对该文章的评论