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。你可以使用快速枚举和索引下标来提高可读性