私は、スタンフォードのオンライン コース iPhone および iPad 用の iOS 7 アプリの開発 ( iTunes U のコースへのリンク) をフォローしています。
最初の課題では、メモに記載されているいくつかのクラス (Card、PlayingCard、Deck、PlayingCardDeck) を作成し、View Controller を更新してトランプのデッキにランダムなカードを表示するように生徒に求めます。
必要なタスクには次の 2 つがあります。
- タイプ Deck * のプライベート プロパティを CardGameViewController に追加します。
- 遅延インスタンス化を使用して、このプロパティを (プロパティの getter で) 割り当てて初期化し、PlayingCards の完全なデッキで開始するようにします。
コードに以下を追加しました。
// 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
ヒントは次のことを示します。
- 追加する必要があるプロパティのタイプは (PlayingCardDeck ではなく) Deck である必要がありますが、PlayingCardDeck を使用して遅延インスタンス化する必要があることは明らかです。PlayingCardDeck は Deck を継承するため、これはオブジェクト指向プログラミングでは完全に合法です。オブジェクト指向プログラミングのこの概念に混乱している場合、このコースはかなり難しいかもしれません。
PlayingCardDeck は Deck のサブクラスです。それが「デッキ」であることを理解しています。
私が理解できないのは、PlyaingCardDeck の代わりに Deck のプロパティが使用されている理由です。