带方括号的objective-c点表示法

带方括号的objective-c点表示法,objective-c,object,syntax,brackets,cs193p,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"]; } +

嗨,我不明白这个代码当然是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"];
}
 + (NSArray *)validSuits
{
    return @[@"♥️", @"♦️", @"♠️", @"♣️"];
}
self.rank是随机数的获取者

@property (nonatomic) NSUInteger rank;
另一个变量方法中的self.suit

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

我在代码NSLog中插入以了解其功能。。。。我知道它从rankstring中获取等级,并将它们与西装连接起来。。。。但我不明白怎么做!附加字符串的方法很清楚。。。但是你如何获得价值观排名呢​​从rankStrings?[PlayingCard rankStrings]是对变量方法的简单调用,整数秩是一个getter

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

[[[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方法的属性语法。

[PlayingCard rankString]
可能会返回一个数组

self.rank
正在提供一个
nsuiger

我们可以使用方括号表示法访问数组索引,如下所示:

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

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

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

您提供的代码片段可以很容易地重写为:

NSArray *playingCardArray = [PlayingCard rankString];

NSMutableString *rankString = playingCardArray[self.rank];

[rankString stringByAppendingString:self.suit];

你是对的,这很令人困惑,因为
[]
有点“过载”
[self.rank]
实际上是从方法调用
[PlayingCard rankStrings]
返回的数组上的索引操作。当然,
这里用来暗示对
rank
的“getter”的方法调用,不是对结构中由
self
标识的字段的引用,就像香草C/C++一样。要真正做到这一点,请使用
objectAtIndex
替换索引,并使用
[]
引用替换虚线属性引用。