Мой класс заголовка выглядит так:
#import "Card.h"
@interface PlayingCard : Card
@property (strong, nonatomic) NSString *suit;
@property (nonatomic) NSUInteger rank;
+ (NSArray *) validSuits;
+ (NSUInteger) maxRank;
@end
И моя реализация:
@implementation PlayingCard
+ (NSArray *) validSuits
{
return @[@"♥︎", @"♣︎", @"♦︎", @"♠︎"];
}
+ (NSArray *) rankStrings
{
return @[@"?", @"1", @"2", @"3", @"4"];
}
- (void)setSuit:(NSString *)suit
{
if ([[PlayingCard validSuits] containsObject:suit])
{
_suit = suit;
}
}
- (NSString *)suit
{
return _suit ? _suit : @"?"; // if suit !nil return suit, else return ? string.
}
+ (NSUInteger)maxRank
{
return [[self rankStrings] count] - 1;
}
@end
Итак, я понимаю, что любой метод со знаком + означает, что это метод класса.
Мой вопрос в том, почему я должен использовать [PlayingCard classMethod]
, например. [PlayingCard validSuits]
в методе setSuit
, тогда как я могу использовать [self classMethod]
, например. [self rankStrings]
в методе maxRank
?
Я предполагаю, что это как-то связано с тем, что метод maxRank
является методом класса, а setSuit
— нет. Но может ли это быть потому, что setSuit
сеттер?
Я действительно не знаю, я не могу представить, что здесь происходит. Я только начал свой набег на Objective-C и исхожу из фона Java.
Я понял, что могу заменить PlayingCard
на self
в методе maxRank
без каких-либо сообщений об ошибках, однако замена self
на PlayingCard
в методе setSuit
дает мне сообщение об ошибке
No visible @interface for 'PlayingCard' declares the selector for 'validSuits'
Любое объяснение того, почему это так и что происходит, было бы здорово. Спасибо!