【发布时间】:2013-11-07 19:23:10
【问题描述】:
我正在关注斯坦福在线课程为 iPhone 和 iPad 开发 iOS 7 应用程序 (link to course in itunes U)。
第一个作业要求学生创建笔记中详述的一些类(Card、PlayingCard、Deck、PlayingCardDeck),并更新视图控制器以在一副扑克牌中显示随机卡片。
两个必需的任务包括:
- 将 Deck * 类型的私有属性添加到 CardGameViewController。
- 使用惰性实例化来分配和初始化此属性(在属性的 getter 中) 所以它从一副完整的扑克牌开始。
我在代码中添加了以下内容:
// 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。
【问题讨论】:
标签: objective-c oop inheritance typing declared-property