objective-c带方括号的点符号

时间:2014-07-21 22:07:21

标签: objective-c object syntax brackets cs193p

嗨,我当然不明白这个代码CS193p

[[PlayingCard rankStrings][self.rank] stringByAppendingString:self.suit];

其中rankString是变量方法

 + (NSArray *)rankStrings
{
    return @[@"?", @"A", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", @"10", @"J",      @"Q", @"K"];
}

self.rank是一个随机数的吸气剂

@property (nonatomic) NSUInteger rank;
另一个变量方法

和self.suit

 + (NSArray *)validSuits
{
    return @[@"♥️", @"♦️", @"♠️", @"♣️"];
}

我在我的代码NSLog中插入以了解其功能....我明白它需要从rankStrings获得排名并将它们与诉讼联系起来....但我不明白如何!方法appendingString是明确的......但是如何从rankStrings获得值排名? [PlayingCard rankStrings]是对变量方法的简单调用,NSUInteger等级是一个getter

2 个答案:

答案 0 :(得分:1)

您发布的第一行代码是以下内容的简写:

[[[PlayingCard rankStrings] objectAtIndex:self.rank] stringByAppendingString:self.suit];

分解:

NSArray *array = [PlayingCar rankString];
NSString *str = array[self.rank]; // modern syntax for [array objectAtIndex:self.rank]
[str stringByAppendingString:self.suit];

当然self.rank是实际转换为[self rank]以调用getter方法的属性语法。

答案 1 :(得分:1)

据推测,

[PlayingCard rankString]会返回一个数组。

self.rank正在提供NSUInteger

我们可以使用方括号表示法来访问数组索引:

myArray[10] // this accesses the object at index 10 of myArray

[PlayingCard rankString][self.rank]正在访问self.rank返回的数组的[PlayingCard rankString]索引处的对象。

该索引处的对象可能是一个可变字符串,因此我们现在在返回的对象上调用字符串方法。

您提供的代码段可以轻松地重写:

NSArray *playingCardArray = [PlayingCard rankString];

NSMutableString *rankString = playingCardArray[self.rank];

[rankString stringByAppendingString:self.suit];