对于我的iOS应用程序,我创建了一个名为Tile的类,它是UIImageView
的子类。
图块显示为一种包含6行和5列的数组。
我之前创建了30个Tile类的实例。这些实例都以这种方式命名:RiCj
其中i
是行号,j
是列号。
我想创建一个for循环,我会对每个tile应用特定的处理(基本上,我想显示tilesTile是Tile类的实例方法的tile。)
我很想做(我知道下面的代码不正确):
for (int i = 1; i <= numberOfRows ; j++) {
for (int j = 1; j <= numberOfColumns ; j++) {
[self.RiCj displayTile];
}
}
我不知道如何根据动态字符串标题调用我的图块。
答案 0 :(得分:0)
是的,您可以通过创建一个命名该属性的字符串,然后使用KVC来实际访问类的属性,如下所示:
NSString *propertyName = [NSString stringWithFormat:@"R%dC%d", i, j];
tile = [self valueForKey:propertyName];
但是你呢? 不,不是在这种情况下。当制作数组(或数组数组)的完美替代方案可用时,这是一个可怕的黑客。
以下是数组创建和访问的数组(通过为数组使用方便的Objective C文字):
NSArray *tiles = @[
@[ tile0C0, tile0C1, tile0C2 ],
@[ tile1C0, tile1C1, tile1C2 ],
@[ tile2C0, tile2C1, tile2C2 ],
];
for (int i = 0; i < numberOfRows ; j++) {
for (int j = 0; j < numberOfColumns ; j++) {
tile = tiles[j][i];
// do stuff with tile
}
}
答案 1 :(得分:0)
是的,从技术上讲,这是可能的 - 您可以像这样使用Key-Value Coding:
for (int i = 1; i <= numberOfRows; i++) {
for (int j = 1; j <= numberOfColumns; j++) {
NSString* tileName = [NSString stringWithFormat:@"R%dC%d", i, j];
[[self valueForKey:tileName] displayTile];
}
}
但你不应该。它不会是一个干净的解决方案。数组是一个更自然的选择。
答案 2 :(得分:-2)
如果我理解正确,您将尝试动态地通过变量名访问实例。你不能这样做,因为你的变量名是为程序员设计的,并且在运行时不可用。
但是,您可以做的是将创建的实例列表保存在某个数组中,并在需要访问它时简单地遍历该数组。
或者,如果您将30个图块创建为30个不同的属性,则可以使用一些动态代码来获取它们。但是,在那时,我强烈建议使用数组技术。