objective-c - 使用表示变量名称的字符串来设置变量

标签 objective-c variables indexing nsstring

这是一个我知道可以简化的基本示例,但为了测试目的,我想以这种方式执行此操作。我想根据附加字符串设置一个变量(变量“cam0”和“pos1”已在类中声明)。附加字符串本质上是一个索引,我将迭代一个循环,将摄像机(cam0、cam1..)分配到不同的位置(pos0、pos1..)。

cam0 被定义为 UIImageView
pos1 被定义为 CGRect

这适用于名为 coverIndex 的 NSString 变量:

NSString* text = [[NSString alloc] initWithString:@""];
NSLog(@"%@",(NSString *)[self performSelector:NSSelectorFromString([text stringByAppendingString:@"coverIndex"])]);

我为 coverIndex 设置的正确字符串已记录到控制台。

现在回到我的 UIImageView 和 CGRect。我希望这个能发挥作用。

NSString* camText = [[NSString alloc] initWithString:@"cam"];
NSString* posText = [[NSString alloc] initWithString:@"pos"];

[(UIImageView *)[self performSelector:NSSelectorFromString([camText stringByAppendingString:@"0"])] setFrame:(CGRect)[self performSelector:NSSelectorFromString([posText stringByAppendingString:@"1"])]];

我的错误是“请求转换为非标量类型”

这是我发现做这类事情的唯一方法(并使 NSLog 工作),但我仍然相信有一种更简单的方法。

非常感谢您的帮助:)

最佳答案

使用KVC ,这是一项令人惊叹的技术,可以满足您的需求:

for (int index = 0; index < LIMIT; index++) {

    NSString *posName = [NSString stringWithFormat:@"pos%d", index];
    CGRect pos = [[self valueForKey:posName] CGRectValue];
    NSString *camName = [NSString stringWithFormat:@"cam%d", index];

    UIImageView *cam = [self valueForKey:camName];
    cam.frame = pos;
}

关于objective-c - 使用表示变量名称的字符串来设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5680284/

相关文章:

Ruby 动态创建方法和变量

java - 将 lambda(函数)分配给要在 Java 中作为参数传递的变量

r - 对 data.frame 进行子集化时对负索引的解释

ios - 重新排序 CollectionView 单元格 iOS 11

mysql - 在过程中使用变量值创建 MySQL 查询

ios - ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering 不工作

python - 不断收到 IndexError 并且不确定为什么在 Python 中

python - key 错误 : item not in index while trying to build boxplot with pandas

ios - 在 iOS 中与服务器保持持续连接

ios - NSDictionaries 的 NSMutableArray