0

我想通过 , 等获取属性名称self.label1self.label2self.label3知道如何将 NSString 转换为 JS 或 Ruby 等方法吗?

我的标题是

@property(nonatomic,strong)CCLabelTTF *label1;
@property(nonatomic,strong)CCLabelTTf *label2;...

实现

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

  NSString *str = [NSString stringWithFormat:@"self.label%i",i];
  // convert str to property
  converted_str = [CCLabelTTF labelWithString:%@"hello  below style is  not good...

我想避免这种风格...

for(int i  = 0 ;i < 10;){
   if (i == 0){
   self.label1 = ...
   }else if(i == 1){
   self.label  = ...
}

你有什么主意吗?提前致谢。

4

4 回答 4

4

为什么不将标签放入这样的数组中:

NSArray *myLabels = @[self.label1, self.label2...];

然后你可以:

for (CCLabelTTF *label in myLabels) {
    // Do something with the label
}

或者,您可以使用 KVC。

for (int i = 1; i <= 10; i++) {
    NSString *labelName = [[NSString alloc] initWithFormat:@"label%d", i];
    CCLabelTTF *label = [self valueForKey:labelName];
    // Do something with the label
}
于 2012-08-23T20:17:47.130 回答
2

尝试使用 KVC:

NSString *keyPath = [NSString stringWithFormat:@"label%i", labelNumber];

id value = [CCLabelTTF ....];

[self setValue:value forKey:keyPath]; // use KVC to set the value for you
于 2012-08-23T20:17:25.580 回答
0

您可以使用Key-Value Coding来做到这一点,但听起来您真正想要的是使用数组。如果您不使用数组的原因是因为这些是您需要连接的插座,您只需将数组声明为 an 即可IBOutletCollection

于 2012-08-23T20:19:12.163 回答
0

好吧,KVC 角度的更原始形式是:

SEL sel = NSSelectorFromString(propertyName);
id leProperty = [object performSelector:sel];

但是,KVC 更彻底,如果使用此方法输入错误,则会引发异常。同样,performSelector:对 ARC 也不是很友好。

如果你想低于这个,你总是可以使用 objc 运行时来做到这一点。

于 2012-08-23T20:31:19.863 回答