为什么Class在Xcode中不显示为蓝色?

时间:2013-06-18 15:02:22

标签: iphone

我有一个名为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;

    }
}

@end

@interface PlayingCard : Card

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

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


@end

1 个答案:

答案 0 :(得分: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;
}

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


您应该添加{}以明确定义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;
        }
    }
}