Foreach循环有2个变量

时间:2014-06-26 10:35:04

标签: ios foreach

我创建了一个foreach循环,如下所示

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

        NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];

        NSCalendar *c = [NSCalendar currentCalendar];
        NSDate *nowDate = [NSDate date];
        NSDate *treeDate = [defaults objectForKey:@"tree_1"];
        NSDateComponents *components = [c components:NSHourCalendarUnit fromDate:treeDate toDate:nowDate options:0];
        NSInteger treeInt = components.hour;

        if(treeInt >= 0){
            [_tree1 setSpriteFrame:[CCSpriteFrame frameWithImageNamed:@"TreeStump.png"]];
        }
    }

我想要实现的是让循环增加tree_1_tree1。我不确定如何将i添加到2个位置的变量中。因此,在@""setSpriteFrame方法

例如,i == 3字符串@"tree_4"和变量_tree4

3 个答案:

答案 0 :(得分:0)

第一部分很简单:

[NSString stringWithFormat:@"tree_%i", i + 1];

%i部分是一个类型说明符,它告诉底层算法它应该期望和int参数。您可以这样使用:

NSDate *treeDate = [defaults objectForKey:[NSString stringWithFormat:@"tree_%i", i + 1]];

第二部分有点棘手,因为您必须修改代码。如果要在循环中迭代几个变量,最简单的方法是将它们放在一个数组中,并使用循环计数器来访问它中的项目。
看到你的循环有30次迭代,从一开始就将_treeX变量存储在数组或其他容器中似乎是个好主意,以便不要有30个变量。将东西放入数组/容器中可以让您动态地更改项目数,而无需更改大量代码。

答案 1 :(得分:0)

我认为您需要以下内容,因为您在这里使用cocos2d,您可以轻松访问在您拥有的任何父级中添加的精灵。

[NSString stringWithFormat:@"tree_%i", i + 1];

if(treeInt >= 0){
    CCSprite *sprite = (CCSprite*)[self getChildByTag:i+1];
    [sprite setSpriteFrame:[CCSpriteFrame frameWithImageNamed:@"TreeStump.png"]];
}

只需要为精灵设置标签,同时按照相同的顺序创建精灵。

答案 2 :(得分:0)

对于第一部分很简单,您可以使用格式为的字符串:

[NSString stringWithFormat:@"tree_%i", i + 1];

对于第二种,您可以使用objective c run time功能来访问名称为的实例变量。

Ivar class_getInstanceVariable(Class cls, const char * name)