目标c中的轻量级泛型

Hai*_*Kao 4 generics xcode objective-c xcode7

我试图用轻量级泛型实现堆栈类.但代码无法编译,因为Xcode无法找到定义ObjectType

@implementation Stack
- (ObjectType)popObject     !!!!!!!!!Expected a type
{
    return self.allObjects.firstObject;
}
@end
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为标头声明不会产生任何错误.

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

我可以通过改变ObjectType来使它工作id.有没有更好的方法来修复错误?

Dou*_*ill 13

Objective-C泛型实际上是轻量级的,并且被添加以改善与Swift的互操作性,而不是使Objective-C代码更安全.与可空性类似,将泛型视为注释界面的一种方式,而不是改变实现的理由.

更改ObjectType到id 在执行是前进的最佳途径.

进一步阅读:关于Objective C Generics的文章.如果您想了解,请阅读bob对该文章的评论__covariant.