Objective c 如何将类id的对象强制转换为NSMutableArray的CGPoint?

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、

如果我有一个类id为的对象myObject,我将如何将其“转换”为CGPoint(假设我已经执行了内省并知道myObject是CGPoint)?尽管CGPoint不是一个真正的Obj-C类,但这是事实

简单地执行
(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更熟悉了,我发现它更多的是负担而不是好处。