2012-01-25 22 views
0

我有一个在for循环中表示int的一般情况。使用%i在任何for循环上运行

我有一些变量(它并不真正的问题),这是菜单项(cocos2d的)的实例,并且得到的数字是这样的:

w1,w2,w3,w4... 

,并作记录他们中的每一个指针:

CCMenuItemImage *w1= ..... 

,他们有这样的特性:w1.tag=1 w2.tag=2... 现在我的基本问题是如下这个W公司的环路上运行:

for(int i=0;i<10;i++) 
{ 

if (w%i.tag <5) 
//do here 
} 

现在我正试图找到一种方法来呈现w后的数字与我的索引!

它容易与nsstrings但如果我需要其他任何有一个数字之后呢?

非常感谢。

回答

0

使用顺序号命名变量几乎总是表示您应该使用数组来代替。

@interface MyClass 
{ 
    CCMenuItemImage *w[10]; // ten of them! 
} 
@end 

@implementation MyClass 

- (id) init 
{ 
    self = [super init]; 
    if (!self) return nil; 

    for (int i = 0; i < 10; i++) 
    { 
     w[i] = /* make a new one */; 
     w[i].tag = i; 
    } 

    return self; 
} 

如果您曾经有过仅在序列中位置不同的同类对象,那么您需要一个数组。

3

我想你应该使用一组菜单和图像来代替。

+0

什么样的数组?它不是一个字符串,它的一个CCMenuItem ....不能理解这个答案 – Curnelious

+0

NSArrays可以存储任何类型的对象。 – Almo

+0

@Almo:NSArrays不能存储任何类型的对象,“int”,“void *”,“struct”等是不能存储在NSArrays中的类型(默认情况下)。 – dreamlax

0

在ObjC,如果你想打印格式的字符串是有办法做到这一点

的NSString * formattedString = [NSString的stringWithFormat @ “%@%I%@”,@ “你好”,1,@”世界”]; NSLog(@“formatted string:%@”,formattedString);将打印

“Hello1World”不带引号

FYI:formattedString是一个自动释放的对象,所以不会再次释放。

+0

问题不在于格式化字符串,而在于用一些循环来处理变量,分类。 – dreamlax

1

现在我正试图找到一种方法来显示在我的索引后面出现的数字 !

它容易与nsstrings但如果我需要其他任何有 数字后面呢?

你的w没有编入索引 - 它们是单独的变量,只是恰好有相似的名称。如果它们是实例变量或属性,则可以使用键值编码以您尝试的方式访问它们。它会是这样的:

NSString *key = [NSString stringWithFormat:@"w%d.tag", i]; 
int tag = [[self valueForKey:key] intValue]; 

一样大KVC是,我不认为这是一个特别好它。如果你想通过索引访问这些对象,你应该将它们存储在一个提供该对象的容器中。您可以在创建菜单项时将菜单项存储在数组中,或者可以将它们放入要访问的代码中的数组中。例如:

NSArray *items = [NSArray arrayWithObjects:w1, w2, w3, w4, nil]; //add as many as you like 
for (int i = 0; i < max; i++) { 
    if ([w objectAtIndex:i].tag < 5) { 
    // whatever you like 
    } 
} 
0

作为替代,这是不建议,其实你可以得到使用object_getInstanceVariable函数实例变量的地址。

for (int i = 0; i < 10; i++) 
{ 
    NSString *name = [NSString stringWithFormat:@"w%i", i]; 
    Ivar ivar = object_getInstanceVariable(self, [name UTF8String], NULL); 
    CCMenuItemImage *w = (void *)((char *)self + ivar_getOffset(ivar)); 

    w.tag = i; 
} 

请记住,不要使用它,它纯粹是一个教育的答案。