Objective c 如何将类id的对象强制转换为NSMutableArray的CGPoint?
如果我有一个类id为的对象myObject,我将如何将其“转换”为CGPoint(假设我已经执行了内省并知道myObject是CGPoint)?尽管CGPoint不是一个真正的Obj-C类,但这是事实 简单地执行Objective c 如何将类id的对象强制转换为NSMutableArray的CGPoint?,objective-c,class,casting,cgpoint,Objective C,Class,Casting,Cgpoint,如果我有一个类id为的对象myObject,我将如何将其“转换”为CGPoint(假设我已经执行了内省并知道myObject是CGPoint)?尽管CGPoint不是一个真正的Obj-C类,但这是事实 简单地执行(CGPoint)myObject将返回以下错误: 使用需要算术或指针类型的“CGPoint”(也称为“struct CGPoint”) 我想这样做,这样我就可以检查传递给NSMutableArray的对象是否是CGPoint,如果是,则自动将CGPoint包装在NSValue中;e、
(CGPoint)myObject
将返回以下错误:
使用需要算术或指针类型的“CGPoint”(也称为“struct CGPoint”)
我想这样做,这样我就可以检查传递给NSMutableArray的对象是否是CGPoint,如果是,则自动将CGPoint包装在NSValue中;e、 g:
- (void)addObjectToNewMutableArray:(id)object
{
NSMutableArray *myArray = [[NSMutableArray alloc] init];
id objectToAdd = object;
if ([object isKindOfClass:[CGPoint class]]) // pseudo-code, doesn't work
{
objectToAdd = [NSValue valueWithCGPoint:object];
}
[myArray addObject:objectToAdd];
return myArray;
}
附加代码
以下是我用来执行“内省”的函数:
CGPoint
不是Objective-C对象。不能将一个参数传递给addObjectToNewMutableArray:
方法。编译器不允许您使用
您需要将CGPoint
包装在NSValue
中,并将包装传递给您的addObjectToNewMutableArray:
方法
如果您有一个NSValue
,并且您想测试它是否包含CGPoint
,您可以这样问它:
if (strcmp([value objCType], @encode(CGPoint)) == 0) {
CGPoint point = [value CGPointValue];
...
}
CGPoint
不是Objective-C对象。不能将一个参数传递给addObjectToNewMutableArray:
方法。编译器不允许您使用
您需要将CGPoint
包装在NSValue
中,并将包装传递给您的addObjectToNewMutableArray:
方法
如果您有一个NSValue
,并且您想测试它是否包含CGPoint
,您可以这样问它:
if (strcmp([value objCType], @encode(CGPoint)) == 0) {
CGPoint point = [value CGPointValue];
...
}
点不是对象,因此不能投射到一个点上。。。 反之亦然 强制转换不会转换数据,它只会更改数据的解释方式
id基本上是NSObject的缩写*btw点不是对象,因此不能强制转换为一个。。。 反之亦然 强制转换不会转换数据,它只会更改数据的解释方式
id基本上是NSObject的缩写。顺便说一句,CGPoint不是Objective-C对象类型。你做了什么反省?编辑您的帖子,向我们展示您的内省代码及其输出。CGPoint不是类。您的
id
不能是CGPoint对象。这是不可能的。它可能是一个包装在NSValue中的CGPoint。日志[myObject类]
。你得到了什么?好的,我将重写我的问题。CGPoint
不是Objective-C对象类型。你做了什么反省?编辑您的帖子,向我们展示您的内省代码及其输出。CGPoint不是类。您的id
不能是CGPoint对象。这是不可能的。它可能是一个包装在NSValue中的CGPoint。日志[myObject类]
。你得到了什么?好的,我将重写我的问题。id
不是“NSObject*
的缩写”。除了NSObject
,还有其他根类,比如NSProxy
。我知道,我说基本上是因为我简化了它。。它实际上是typedef struct objc_object{Class isa;}*id或其他东西。。我的观点是它是一个物体<代码>id不是NSObject*的“缩写”。除了NSObject
,还有其他根类,比如NSProxy
。我知道,我说基本上是因为我简化了它。。它实际上是typedef struct objc_object{Class isa;}*id或其他东西。。我的观点是它是一个物体;之前我制作了一个定制的CGPointsArray类,在这个类中,我可以在不使用NSValue包装器的情况下将CGPoints添加并提取到可变数组中,但是现在我对Obj-C更熟悉了,我发现它更多的是一种负担而不是好处。以前我制作了一个自定义CGPointsArray类,在这个类中,我可以在不使用NSValue包装器的情况下将CGPoints添加和提取到可变数组中,但现在我对Obj-C更熟悉了,我发现它更多的是负担而不是好处。