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 对该文章的评论
我正在尝试使用轻量级泛型实现堆栈 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
.