Stanford公开课(iOS7)1-3课总结及Demo

Markdown一下&课程地址

Markdown语法速览,开始使用简书来记录学习iOS的历程及一些小想法与大伙分享。

课程地址:斯坦福大学公开课:iOS7应用开发

题记

敲完Stanford公开课(iOS7)1-3课达到的目的:快速熟悉OC的一些基本语法、Xcode的使用以及思考在游戏里面MVC的用法。

MVC架构图解

Paste_Image.png
  • 视图(View) :用户界面(可视UI)
  • 模型(Model): 业务模型(业务处理逻辑)
  • 控制器(Controller): 确保Model和View的同步,一旦Model改变,View应该同步更新

开始游戏

效果图 :

Paste_Image.png

游戏拆解(Model)

Paste_Image.png

通过这五个类学习OC的面向对象继承等属性,这里主要说下封装了游戏逻辑的CardMatchingGame类:


#import <Foundation/Foundation.h>
#import "Deck.h"
#import "Card.h"

//设计一个类封装游戏的逻辑
@interface CardMatchingGame : NSObject


//初始化封装类CardMathingGame 参数指定游戏的牌数 和牌堆
- (instancetype)initWithCardCount:(NSUInteger)count usingDeck:(Deck *)deck;

//通过下标选中牌
- (void)chooseCardAtIndex:(NSUInteger)index;

//通过下标返回一张牌
- (Card *)cardAtIndex:(NSUInteger)index;

@property (nonatomic,readonly) NSInteger score;

@end

学习以及总结以后新建类的时候哪些公开API,哪些要封装好即可(孰能生巧,要多敲代码)。

这里说下自定义初始化器

//自定义初始化方法(为什么要self = [super self]?先这样写(苹果这样要求))
- (instancetype)initWithCardCount:(NSUInteger)count usingDeck:(Deck *)deck{
    self = [super init];
    
    if (self){
        for (int i = 0; i < count; i++) {
            Card *card = [deck drawRandowCard];
            if (card){
                [self.cards addObject:card];
            }else {
                self = nil;
                break;
            }
            
        }
    }
    
    return  self;
    
}

类实例化有的时候就要求对象做一些特殊处理,这就需要设计指定初始化器,因为原始的初始化方法-(instancetype)init方法是无法让实例对象持有有效的数据(自带的方法初始化后,基本数据类型属性=0;对象属性默认为nil)。

最后

不能也不要做温水煮青蛙,现在开始自学下iOS。如能小成,也算多了一份技能,这里以我比较喜欢的偶像之一,大家共勉!
Instagram的创始人凯文·赛斯特伦
Demo地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容