我不确定'self.cards [index]'中的'index'到底是什么意思。 我知道[index]本身就是objectAtIndex:index方法的简写,但是在这段代码中似乎已经声明并初始化了一个名为index的局部变量,我只想检查self.cards [index]中引用的是什么索引至 - 也就是说,它是变量索引,每次使用时都是一个随机数,或者索引只是索引的通用占位符?
-(Card *)drawRandomCard
{
Card *randomCard = nil;
if ([self.cards count]) {
unsigned index = arc4random() % [self.cards count];
randomCard = self.cards[index];
[self.cards removeObjectAtIndex:index];
}
return randomCard;
;
答案 0 :(得分:3)
正如其他人所提到的,index是一个局部变量,在这里定义:
unsigned index = arc4random() % [self.cards count];
下一行只是使用该变量来访问数组self.cards中的对象:
randomCard = self.cards[index];
这称为Objective C Subscripting - 它类似于Literal,并且大部分只是ObjectAtIndex的简写(一些警告适用;这就是Objective C不是初学者语言的原因)。
例如:
// Fetch an object from this array, at index 2
id object = myArray[2];
// Fetch an object from this Dictionary, with key TestKey
id object = myDict@[@"TestKey"];
...都是利用数组和字典下标的有效方法。您展示的代码只是用实际变量替换文字(“TestKey”和“2”)。
例如,此代码是等效的:
// Fetch an object from this array, at index 2
int myIndex = 2;
id object = myArray[myIndex];
// Fetch an object from this Dictionary, with key TestKey
NSString *myKey = @"TestKey";
id object = myDict@[myKey];
订阅和许多文字类型对于目标C来说是相当新的。我建议观看WWDC视频现代目标C以获取更多信息。另外,这里有一个快速参考:http://clang.llvm.org/docs/ObjectiveCLiterals.html
答案 1 :(得分:0)
下面的代码将为变量“index”赋值0和数组中的卡数 - 1。
unsigned index = arc4random() % [self.cards count];
因此,如果阵列中有4张牌,它将在0和3之间返回。
然后,以下行获取该数组条目并将其分配给randomCard变量。
如果它让你感到困惑,这个实例中的