这不是解决这个问题的特别干净的方法,但要回答你提出的问题:
- (void)generateRivals
{
for (int i = 1; i < 4; i++)
{
NSString *propertySetString = [NSString stringWithFormat:@"setRival%d", i];
Rival *rival = [[Rival alloc] init];
[self performSelector:@selector(NSSelectorFromString(propertySetString)) withObject:rival];
}
}
我们创建了一个选择器(我还没有测试过,但理论上它应该可以工作),它对应于由 i 表示的属性实例的 getter。
根据您添加的评论,您似乎真正想要的是可变数量的玩家(可能不超过一定数量),并且能够单独引用它们。
从架构上讲,与其创建指向每个竞争对手的属性,不如将它们全部放在一个数组中(并将其作为类的属性保存)。所以你会像这样创建它们:
- (void)generateRivals:(NSUInteger)numberOfRivals
{
NSMutableArray *rivalsArray = [[NSMutableArray alloc] initWithCapacity:numberOfRivals];
for (int i = 0; i < numberOfRivals; i++)
{
Rival *rival = [[Rival alloc] init];
[rivalsArray insertObject:rival atIndex:i];
}
[self setRivalsArray:rivals];
}
然后,当您需要访问特定竞争对手时,调用这样的方法,该方法将返回您传递的索引号处的竞争对手:
- (Rival *)rivalWithNumber:(NSUInteger)number
{
return [[self rivalsArray] objectAtIndex:number];
}