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.