0

我有一个名为 PlayingCard 的课程。我正在尝试在名为 PlayingCardDeck 的类中使用它。

我在 PlayingCardDeck.h 中导入了 PlayingCard.h

#import "PlayingCard.h"

@interface PlayingCardDeck : Deck

@end

当我尝试在 PlayingCardDeck.m 中调用类方法时,它不会显示为蓝色。XCode 确实会在自动完成中看到该类,但在选择时它不是蓝色的。在这个例子中,我试图调用 init 方法。但是,我得到了错误的预期表达式,就好像它 XCode 不知道 PlayingCard 类是什么一样。调用 card.rank = 和 card.suit= 的错误也不起作用,因为我相信 PlayingCard 没有被识别。这没有意义,因为我已经定义了该类并将其导入 PlayCardDeck.h 有人可以了解一下吗?提前致谢。

#import <Foundation/Foundation.h>
#import "Deck.h"
#import "PlayingCard.h"

@interface PlayingCardDeck : Deck

@end


#import "PlayingCardDeck.h"

@implementation PlayingCardDeck

-(id) init
{
    self = [super init];

    if (self) {
        for(NSString *suit in [PlayingCard validSuits])
            for(NSUInteger rank =1; rank <= 10; rank++)
                PlayingCard *card = [[PlayingCard alloc] init];
                card.rank = rank;
        card.suit = suit;

    }
}

@结尾

@interface PlayingCard : Card

@property (strong, nonatomic) NSString* suit;
@property (nonatomic) NSUInteger rank;

+(NSArray *) validSuits;
//+(NSUInteger) maxRank;


@end
4

1 回答 1

5

你缺少{}那些 for 循环给你带来麻烦。

这段代码

if (self) {
    for(NSString *suit in [PlayingCard validSuits])
        for(NSUInteger rank =1; rank <= 10; rank++)
            PlayingCard *card = [[PlayingCard alloc] init];
            card.rank = rank;
    card.suit = suit;

}

其实是这个意思

if (self) {
    for(NSString *suit in [PlayingCard validSuits]) {
        for(NSUInteger rank =1; rank <= 10; rank++) {
            PlayingCard *card = [[PlayingCard alloc] init]; 
        }
    }
    card.rank = rank;
    card.suit = suit;
}

现在您可以清楚地看到 card 变量超出了范围。


您应该像这样添加{}明确定义 for 循环的范围

if (self) {
    for(NSString *suit in [PlayingCard validSuits]) {
        for(NSUInteger rank =1; rank <= 10; rank++) {
            PlayingCard *card = [[PlayingCard alloc] init];
            card.rank = rank;
            card.suit = suit;
        }
    }
}
于 2013-06-18T15:06:37.730 回答