斯坦福大學公開課IOS 7 學習筆記(2)
上次的内容
//Card.h
#import <Foundation/NSObject.h>
//#import <Foundation/Foundation.h>
//#import Foundation;
@interface Card : NSObject
//預設object-c會自動建立getter與setter
@property {strong ,nonatomic} NSString * contents;
@property {nonatomic} BOOL chosen;
@property {nonatomic} BOOL matched;
//方法預設命名 getter->matched setter->setMatched
//方法重命名 @property {nonatomic,getter=isMatched} BOOL matched;
- (int ) match:(Card *)card;
- (int ) matchs:(NSArray *)card;
@end
//Card.m
#import "Card.h"
//私有屬性或方法的聲明,主要用于屬性
@interface Card()
@end
//滅有synthsize你将無法建立card執行個體,而且它沒有名,你無法再getter和setter中引用它
//實際上這些代碼是看不到的,object-c會自動建立
@synthesize contents = _contents;
@synthesize chosen = _chosen;
@synthesize matched = _matched;
//- (NNString *)contents 是一個方法聲明
// - 表示這是一個方法
- (NNString *)contents{
return _contents;
}
- (void)setContents:(NNString *contents){
_contents = contents;
}
- (BOOL) chosen
{
return _chosen;
}
- (void) setChosen:(BOOL chosen){
_chosen = chosen;
}
- (BOOL) matched{
return _matched;
}
-(void )setMatched:(BOOL matched){
_matched = matched;
}
@implementation Card
- (int )match:(Card *)card{
int score = ;
if([card.contents isEqualToString:self.contents]){
score=;
}
return score;
}
- (int )matchs:(NSArray *)otherCards{
int score = ;
for(Card * card in otherCards){
if([card.contents isEqualToString:self.contents]){
score=;
}
}
return score;
}
@end
Deck
//Deck.h
#import <Foundation/Foundation.h>
@interface Deck:NSObejct
- (void )addCard:(Card *)Card atTop:(BOOL)arTop;
- (void )addCard:(Card *)Card;
- (void )drawRandomCard;
@end
#import "Deck.m"
@interface Deck()
//NSArray 是個基礎集合類,是個不可增加不可删除的類,NSMutableArray可以
@property (strong,nonatomic) NSMutableArray *cards;
@end
@implementation Deck
- (NSMutableArray *)cards{
if(!_cards) _cards = [[NSMutableArray alloc] init]
return _cards;
}
- (void )addCard:(Card *)card atTop:(BOOL)atTop{
if(atTop){
[self.cards insertObject:card atIndex:];
}else{
[self.cards addObject:card];
}
}
- (void )addCard:(Card *)card{
[self addCard:card atTop:No];
}
- (Card *) drawRandomCard{
Card * randomCard = nil;
if([self.cards count]){
unsigned index = are4random()%[self.cards count];
randomCard = self.cards[index];
//等價于 randomCard = [self.cards ObjectAtIndex:index];
[self.cards removeObjectAtIndex:index];
}
return randomCard;
}
@end
PlayingCard
//PlayingCard.h
#import "Card.h"
@interface PlayingCard:Card
@property (strong,nonatomic) NSString *suit;
@property (nonatomic) NSUInteger rank;
+ (NSArray *)validSuits;
+ (NSUInteger *)maxRank;
@end
//PlayingCard.m
#import "PlayingCard.h"
@implementation PlayingCard
//方法重寫 contents->get contents方法 @代表一個對象
- (NSString *)contents {
NSArray *rankString = [PlayingCard rankStrings];
return rankString[self.rank] stringByAppendingString:self.suit;
//return [NSString stringWithFormat:@"%d%@" ,self.rank, self.suit];
}
+ (NSArray *)rankStrings{
return @[@"?",@"A",@"2",@"3",...,@"J",@"Q",@"K"];
}
+(NSUInteger )maxRank{
return [[self rankStrings] count]-;
}
//當提供(重寫)了setter與getter就必須處理synthesize
@synthesize suit=_suit;
//重寫suit
- (NSString *)suit{
if(self.suit)
return @"?";
return self.suit;
}
//"+" 代表類方法,靜态方法
+ (NSArray *) validSuits{
return @[@"1",@"2",@"3",@"4"];
}
//重寫
- (void)setSuit:(NSString *)suit{
//containsObject對于字元串比較,字元串的内容
//使用 @[]就是建立數組
if([ @[@"1",@"2",@"3",@"4"] containsObject:suit ]){
_suit = suit;
}
/**使用類方法
if([[PlayingCard vaildSuits] containsObject:suit ]){
_suit = suit;
}
**/
}
- (void )setRank:(NSUInteger )rank{
if(rank <= [PlayingCard maxRank]){
_rank = rank;
}
}
@end
PlayingCardDeck
//PlayingCardDeck.h
#import "Deck.h"
@interface PlayingCardDeck : Deck
@end
//PlayingCardDeck.m
#import "PlayingCardDeck.h"
#import "PlayingCard"
@implementation PlayingCardDeck
//除了在init方法内,永遠别用alloc
- (instancetype)init{
self = [super init];
if(self){
for(NSString *suit in [PlayingCard validSuits]){
for(NSUInteger rank=;ran <= [PlayingCard maxRanking];rank++){
PlayingCard * card = [[PlayingCard alloc] init];
card.rank = rank;
card.suit = suit;
[self addCard:card];
}
}
}
return self;
}
@end