Я прохожу курс Стэнфордского онлайн-курса «Разработка приложений iOS 7 для iPhone и iPad» (ссылка на курс в itunes U).
В первом задании учащимся предлагается создать несколько классов (Card, PlayingCard, Deck, PlayingCardDeck), подробно описанных в примечаниях, и обновить контроллер представления для отображения случайной карты в колоде игральных карт.
Две обязательные задачи включают в себя:
- Добавьте частное свойство типа Deck * в CardGameViewController.
- Используйте отложенное создание экземпляров для выделения и инициализации этого свойства (в методе получения свойства), чтобы оно начиналось с полной колоды игральных карт.
Я добавил в свой код следующее:
// CardGameViewController.m
#import "PlayingCardDeck.H"
@interface CardGameViewController ()
...
@property (strong, nonatomic) Deck *deck;
@end
@implementation CardGameViewController
- (Deck *)deck
{
if (!_deck) _deck = [[PlayingCardDeck alloc] init];
return _deck;
}
...
@end
Подсказка указывает на следующее:
- Несмотря на то, что тип свойства, которое вы должны добавить, должен быть Deck (а не PlayingCardDeck), вам, очевидно, придется лениво создавать его экземпляр с помощью PlayingCardDeck. Это совершенно законно в объектно-ориентированном программировании, потому что PlayingCardDeck наследуется от Deck и, таким образом, «является» Deck. Если вас смущает это понятие в объектно-ориентированном программировании, этот курс может показаться вам довольно сложным.
PlayingCardDeck является подклассом Deck. Я понимаю, что это "есть" колода.
Чего я не понимаю, так это почему свойство Deck используется вместо PlyaingCardDeck.