我正在尝试使用轻量级泛型实现堆栈类。
但代码无法编译,因为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
我可以通过将ObjectType
更改为id
来使其发挥作用。
有没有更好的方法来解决错误?
答案 0 :(得分:13)
Objective-C泛型确实是轻量级的,并且被添加以改善与Swift的互操作性,而不是使Objective-C代码更安全。与可空性类似,将泛型视为注释界面的一种方式,而不是改变实现的理由。
在实施中将ObjectType
更改为id
是最好的方法。
进一步阅读:article on Objective C Generics。如果您想了解__covariant
,请阅读bob对该文章的评论。
答案 1 :(得分:1)
只有推定,但是,如果用ObjectType
替换id
,可能你使用的不是指针类型吗?
我的意思是,如果您@interface ObjectType
某处Stack
而不是ObjectType*
,则<...>
大括号和方法返回类型<{1}}
如果这不是问题,抱歉误导