Objective c id类型的变量

Objective c id类型的变量,objective-c,xcode,sprite-kit,Objective C,Xcode,Sprite Kit,我有此代码可将障碍精灵节点作为子节点添加到concreateground节点: -(void) addObstaclesToNode:(NSString *)pattern { for(int index = 0; index<[self getPattern:pattern].arrayOfSprites.count; ++index) { id o = [[self getPattern:pattern].arrayOfSprites objectAtI

我有此代码可将障碍精灵节点作为子节点添加到
concreateground
节点:

-(void) addObstaclesToNode:(NSString *)pattern
{
    for(int index = 0; index<[self getPattern:pattern].arrayOfSprites.count; ++index)
    {
        id o = [[self getPattern:pattern].arrayOfSprites objectAtIndex:index];
        o.position = CGPointMake(o.position.x + windowW, o.position.y);
        [concreteGround addChild:[[self getPattern:pattern].arrayOfSprites objectAtIndex:index]];
    }
}
-(void)addObstaclesToNode:(NSString*)模式
{

对于(int index=0;indexYes),您需要确保
o
是支持该选择器的类的实例,或者它支持该选择器

if ([o isKindOfClass:[YCYourClass class]]) {
    YCYourClass *yourClass = o;
    yourClass.position = ...
}
或:


虽然,现在我想起来了,您可能忘记了在声明具有
位置
选择器的接口时包含标题……这可能也会起作用。

是的,您需要确保
o
是支持该选择器的类的实例,或者它支持该选择器

if ([o isKindOfClass:[YCYourClass class]]) {
    YCYourClass *yourClass = o;
    yourClass.position = ...
}
或:

不过,现在我想起来了,您可能只是忘记了在声明接口的头中包含
位置
选择器…这可能也会起作用。

对于您的问题:

在Objective-C中有一个与声明的属性相关的大混乱

对于点表示法,即使它没有说明属性及其访问器的实现方式(合成或显式)和声明(@property或method声明),编译器也不接受任何已知属性,只接受具有已知类型的对象的属性

你可以做两件事:

  • 访问时不要使用点符号。(如果在任何地方声明了该方法,则这是有效的。)

  • 向下投射物体

  • 顺便说一句:您的代码不太客观。您可以使用快速枚举和索引订阅来提高可读性。

    对于您的问题:

    在Objective-C中有一个与声明的属性相关的大混乱

    对于点表示法,即使它没有说明属性及其访问器的实现方式(合成或显式)和声明(@property或method声明),编译器也不接受任何已知属性,只接受具有已知类型的对象的属性

    你可以做两件事:

  • 访问时不要使用点符号。(如果在任何地方声明了该方法,则这是有效的。)

  • 向下投射物体

  • 顺便说一句:你的代码不是非常客观的Cish。你可以使用快速枚举和索引下标来提高可读性