6

我正在尝试使用轻量级泛型实现堆栈类。但是代码编译失败,因为 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

我可以通过更改ObjectTypeid. 有没有更好的方法来修复错误?

4

2 回答 2

17

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

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

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

于 2015-07-02T11:54:45.297 回答
1

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

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

如果不是问题,抱歉误导

于 2015-06-18T08:14:12.260 回答