获取“使用未声明的标识符”,当我添加getter时,为什么?

时间:2014-05-26 18:04:36

标签: ios objective-c

enter image description here

我正在从斯坦福大学网站上完成Matchismo任务。

到目前为止,我完全按照原样跟踪幻灯片。

此外,此错误仅在我实现最后一个方法(即getter)时显示。如果我删除了吸气剂,那就没问题。

可以从这里下载说明:Stanford Course Website

由于

代码:

.m文件:

    #import "playingCard.h"

    @implementation playingCard

    -(NSString *) contents
    {
        NSArray *rankStrings = @[@"?",@"A",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"J",@"Q",@"K"];
    return [rankStrings[self.rank] stringByAppendingString:self.suit];

}

-(void) setSuit:(NSString *) suit
{
    if([@[@"♣︎",@"♥︎",@"♦︎",@"♠︎"] containsObject:suit])
    {
         _suit = suit;
    }
}



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

@end

.h文件:

#import "card.h"

@interface playingCard : card


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


@end

2 个答案:

答案 0 :(得分:9)

Solution slide

添加一行就可以了!

@synthesize suit = _suit;

答案 1 :(得分:-1)

ALT,时刻......你错了什么。

您设置了@property,因此suit 自动合成_suit

然后,你的getter isSuit在逻辑上是错误的。我的意思是isSomething用于接收BOOL并且具有" 更具可读性"吸气。在这种情况下,您不需要更改getter的名称,并且可以使用以下内容声明属性:

@property(strong, nonatomic) NSString *suit;

此时你不需要合成任何东西,因为你的var已经自动化了,你的getter方法可以简单:

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

了解自己在做什么非常重要。

享受!