天天看點

斯坦福大學公開課IOS 7 學習筆記(2)斯坦福大學公開課IOS 7 學習筆記(2)

斯坦福大學公開課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