我有
@interface PlayerDeck : Deck
@interface MasterDeck : Deck
PlayerDeck
和MasterDeck
都有
@property (nonatomic, strong) NSMutableArray *cards; // All cards in this Deck
Inside Deck'我想
-(NSString*) descriptionOfDeck: (Deck *) deck
在PlayerDeck
和MasterDeck
内,我想
-(NSString*) description{
[super descriptionOfDeck:self];
}
Inside Deck我会在每个甲板上迭代卡片:
-(NSString*) descriptionOfDeck: (Deck *) deck {
NSString *deckDescription = [[NSString alloc] init];
for (Card *c in [deck cards]) {
deckDescription = [deckDescription
stringByAppendingString:[c description]];
}
return deckDescription;
}
问题:[卡片卡]无法解决。
请帮助我理解。
答案 0 :(得分:2)
如果我理解正确,您说cards
属性仅在MasterDeck
和PlayerDeck
类上定义,不在<{em>上{{1 }}
如果这是正确的,请在尝试向Deck
发送deck
消息时考虑cards
的类型:它是Deck
类型,不定义cards
。您需要将其强制转换为 定义cards
的类型,或直接在基类中定义cards
。后者似乎更明智,既可以解决这个问题,又因为所有Deck
都有卡片似乎是合适的!
更新:您案例中的投射示例如下:
for (Card *c in [((MasterDeck *) deck) cards])
但你可以看到问题,不是吗?它要求基类以某种方式知道它的子类,这种类会破坏继承的目的。
正如我 - 和@rgeorge在评论中所建议的那样,在基类中声明cards
属性是更好的举措。