[index]是指变量' index'或者是通用索引占位符?

时间:2014-12-01 16:42:32

标签: ios objective-c

我不确定'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;
;

2 个答案:

答案 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变量。

如果它让你感到困惑,这个实例中的可以用不同的变量名替换,“randomCardIndex”可能是一个更好的名字。