【问题标题】:Dynamically construct variable name as in Actionscript [duplicate]动态构造变量名称,如 Actionscript [重复]
【发布时间】:2012-10-06 20:39:50
【问题描述】:

可能重复:
Objective C Equivalent of PHP’s “Variable Variables”

今天在我的一个课程中,我了解到您可以通过在 Actionscript 3.0 中从字符串构建变量名称来访问变量,如下所示:

var star1:symbol;
var star2:symbol;
var star3:symbol;
var star4:symbol;

for(i=1; i <= 4; i++)
    [this "star" + i].method = something

这会得到star1,然后是star2,然后是star3,然后是star4,并对它们执行一些方法。

有没有办法在 Objective-C 中做这样的事情?

【问题讨论】:

标签: objective-c variables syntax


【解决方案1】:

不太整洁,但key-value coding 做到了:

[self setValue:something forKey:[NSString stringWithFormat:@"star%u", i]]

编辑:经过反思,作为非 Actionscript 用户,您是否打算访问属性或调用方法尚不清楚。

您可以在运行时使用NSSelectorFromString 将方法名称转换为选择器,然后使用[self performSelector:...] 调用该事物(如果是后者)。

【讨论】:

    【解决方案2】:

    是的。使用NSArray。然后你可以这样做:

    NSArray *array = [NSArray arrayWithObjects:obj1, obj2, obj3, obj4, nil];
    for (int i = 0; i < [array count]; i++) {
        [[array objectAtIndex:i] doMethod];
    }
    

    甚至更简单:

    NSArray *array = [NSArray arrayWithObjects:obj1, obj2, obj3, obj4, nil];
    for (id obj in array) {
        [obj doMethod];
    }
    

    【讨论】:

    • 或者在现代世界中甚至只是@[obj1, obj2, obj3, obj4]
    【解决方案3】:

    不,但你可以将变量放在一个数组中并以同样的方式实现。

    【讨论】:

      猜你喜欢
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多