NSArray stringByAppendingString

时间:2014-06-05 16:37:01

标签: ios objective-c nsstring nsarray

我需要通过将一个Suit数组添加到一个Rank数组来附加String,就像这样。

-(NSString *)contents {
    return [NSString stringWithFormat:@"%d %@", self.rank, self.suit];
}

正确的代码如下。我不懂代码。 NSString只返回1个字符串或String数组吗? 代码[PlayingCard validRanks]有什么作用? 为什么rankStr必须使用[self.rank]?为什么不能直接使用validRanks和validSuit?

-(NSString *)contents {

    NSArray *rankStr = [PlayingCard validRanks];

    return [rankStr [self.rank] stringByAppendingString: self.suit];
}   

其余代码是:

#import "PlayingCard.h"

@implementation PlayingCard



-(NSString *)contents {

    NSArray *rankStr = [PlayingCard validRanks];

    return [rankStr [self.rank] stringByAppendingString: self.suit];
}   



@synthesize suit = _suit;

-(void)setSuit: (NSString *)suits {
    if ([[PlayingCard validSuits] containsObject:suits]) {
        _suit = suits;
    }
}

-(NSString *) suit {
     return _suit ? _suit : @"?";
}



@synthesize rank = _rank;


-(void)setRank: (NSUInteger)ranks {
    if (ranks <= [PlayingCard maxRank]) {
         _rank = ranks; }
}


+(NSUInteger) maxRank {
    return [self validRanks].count - 1;
} 


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


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


@end

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您刚刚写过[rankStr stringByAppendingString: self.suit],那意味着什么?好吧,rankStr是NSArray。所以我们会在所有等级的数组上调用stringByAppendingString:。这不仅无效,因为NSArray没有任何这样的方法,但它不会是我们想要的,即使它确实存在 - 我们希望得到代表此卡的等级的字符串,然后是卡的西装。所以我们用卡的等级 - rankStr[self.rank]索引数组 - 它返回与rank的{​​{1}}对应的数组中的元素。