【发布时间】:2023-03-07 08:10:01
【问题描述】:
我是一名 iOS 开发新手,仍然习惯于合成变量和 XCode 自动创建变量和 setter/getter 方法的概念。我做了很多研究,但无法找到解决我所面临问题的答案。
我创建了一个头类如下:
#import "Card.h"
@interface PlayingCard : Card
@property (strong, nonatomic) NSString *suit;
@property (nonatomic) NSUInteger rank;
@end
我有以下实现类:
#import "PlayingCard.h"
@implementation PlayingCard
- (NSString *)contents
{
NSArray *rankStrings = @[@"?",@"A",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"J",@"Q",@"K"];
return [rankStrings[self.rank] stringByAppendingString:self.suit];
}
- (void)setSuit:(NSString *)suit
{
if([@[@"♥︎",@"♦︎",@"♠︎",@"♣︎"] containsObject:suit]) {
_suit = suit;
}
}
- (NSString *)suit
{
return _suit ? _suit : @"?";
}
@end
我的错误是,每当我使用 _suit 变量时,我都会从 XCode 中收到一条错误消息:
Use of undeclared identifier '_suit'; did you mean 'suit'?
据我了解,_suit 是由编译器自动生成的,我应该能够使用“_suit”访问头文件中定义的“suit”属性。是因为我覆盖了编译器自动生成的 setter 和 getter 方法吗?将“_suit”更改为“self.suit”似乎可以解决问题,但我很困惑为什么似乎没有生成我的下划线合成变量。任何对此的见解将不胜感激,谢谢!
【问题讨论】: