這不是處理這個的特別乾淨的方式,但要回答這個問題,你所提出的:
- (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];
}
}
我們創建了一個選擇(我沒有測試過這一點,但它應該在理論工作)對應於由我代表吸氣的財產情況。
根據您添加的評論,您真正需要的是可變數量的玩家(可能不超過特定數量),並具備單獨參考的能力。
建築上,而不是創建指向每個對手的屬性,而不是將它們全部放在數組中(並將其作爲屬性保存在類中)。所以,你會喜歡這個創建它們:
- (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];
}
你想做什麼? –
請參閱下面的答案。這不是一種簡單的方法,但是您可以從整數中生成一個字符串,並使用SelectorWithString動態調用各個屬性的setter。 – isaac