写给iOS小白的MVVM教程(序)
这几天,需要重构下部分代码,这里简要记录下.但是涉及的技术要点还是很多,所以分为多个篇章叙述.此教程来源于,并将于应用于实践,不做过多的概念性阐释和争论.每个篇章都会附上实际的可执行的代码.因涉及的技术点,有许多探索的部分,暂定每两天更新一个篇章.欢迎广大iOS同行,批评指正!
教程内容,按更新顺序排序
- 从MVC到MVVM: 结合实际的例子,提出并应用一种从MVC迁移到MVVM的可行性方案.
- 使用RestKit简化网络请求: 此处会结合RestKit,提出并制作一个可直接应用于代码的网络请求实现方案,支持自动翻页,自动配置URL与数据模型的关联关系等.
- 使用MVVM模式,实现iOS122.com网站的博客阅读: 会涉及到使用Leancloud做服务器端,使用marddown库解析markdwon内容,一个更加实际的MVVM各技术细节的具体实现技巧.
定义良好的接口,是成功的第一步!
//
// YFMVVMDelegate.h
// iOS122
//
// Created by 颜风 on 15/10/13.
// Copyright (c) 2015年 iOS122. All rights reserved.
//
#import <Foundation/Foundation.h>
@protocol YFMVVMRequestDelegate;
/**
* MVVM协议,用于规定MVVM模式的基本约定.
*
* 常用于约定"V",此处的V,指的是视图的载体,或者是连接点.可以是一个View,也可以是一个控制器,或者任意NSObject对象.
*/
@protocol YFMVVMDelegate <NSObject>
@required
@property (nonatomic, strong) id model; //!< 数据模型,用于表示从外部传入的数据.
@property (nonatomic, strong, readonly) id viewModel; //!< 数据模型,用于表示直接在视图上显示的数据模型.
@optional
@property (nonatomic, strong) id<YFMVVMRequestDelegate> request; //!< 网络请求.用于联网动态更新数据.
@end
/**
* 用于规定MVVM中的request网络请求的协议.
*/
@protocol YFMVVMRequestDelegate <NSObject>
@required
/**
* 获取数据.
*
* @param component MVVM组件中的V部分,可以是一个View,也可以是一个控制器,或者任意NSObject对象.
* @param success 请求成功时的回调.会把视图模型回调出去.
* @param failure 请求失败时的回调.会把错误信息回调出去.
*/
-(void) get: (id<YFMVVMDelegate>) component
success: (void (^)(id))success
failure:(void (^)(NSError *))failure;
@optional
/**
* 重置页码,从头刷新.
*
* 下次调用 get:success:failure 方法时,会获取最新的数据.
*/
-(void) reset;
/**
* 移动到下一页.
*
* 下次调用 get:success:failure 方法时,会获取下一页的数据.
*/
-(void) nextPage;
@end
写给iOS小白的MVVM教程(序)的更多相关文章
- 写给iOS小白的MVVM教程(一): 从MVC到MVVM之一个典型的MVC应用场景
前言 本着实践为主的原则,此系列文章不做过多的概念性的阐述和讨论;更多的代码和篇幅用来展示MVC和MVVC下的基础代码结构与具体实现,来展示各自优劣.这篇文章,更多的在于发掘MVC与MVVC的共性,以 ...
- (翻译)开始iOS 7中自动布局教程(二)
这篇教程的前半部分被翻译出来很久了,我也是通过这个教程学会的IOS自动布局.但是后半部分(即本篇)一直未有翻译,正好最近跳坑翻译,就寻来这篇教程,进行翻译.前半部分已经转载至本博客,后半部分即本篇.学 ...
- (译)cocos2d-x跨android&ios平台开发入门教程
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...
- 微信iOS消息拦截插件教程-Tweak HelloWorld
微信iOS消息拦截插件教程-Tweak HelloWorld 标签(空格分隔): 越狱开发教程 1.环境准备 准备一台越狱的手机,具体参照上一篇教程 搭建Theos越狱开发环境 2.开发过程 新建一个 ...
- Sagit.Framework For IOS 开发框架入门开发教程2:一行代码实现引导页
前言: 开篇比较简单:Sagit.Framework For IOS 开发框架入门开发教程1:框架下载与环境配置 第二篇教程之前写了一半,感觉不太好写,而且内容单纯介绍API,要说的很多,又枯燥乏味. ...
- iOS 写给iOS开发者的React Native学习路线(转)
我是一名iOS开发者,断断续续一年前开始接触React Native,最近由于工作需要,专职学习React Native也有一个多月了.网络上知识资源非常的多,但能让人豁然开朗.迅速学习的还是少数,我 ...
- iOS 9应用开发教程之多行读写文本ios9文本视图
iOS 9应用开发教程之多行读写文本ios9文本视图 多行读写文本——ios9文本视图 文本视图也是输入控件,与文本框不同的是,文本视图可以让用户输入多行,如图2.23所示.在此图中字符串“说点什么吧 ...
- iOS 9应用开发教程之显示编辑文本标签文本框
iOS 9应用开发教程之显示编辑文本标签文本框 ios9显示.编辑文本 在iOS,经常会看到一些文本的显示.文字就是这些不会说话的设备的嘴巴.通过这些文字,可以很清楚的指定这些设备要表达的信息.本节将 ...
- 写给iOS开发者的React Native学习路线(转)
我是一名iOS开发者,断断续续一年前开始接触React Native,最近由于工作需要,专职学习React Native也有一个多月了.网络上知识资源非常的多,但能让人豁然开朗.迅速学习的还是少数,我 ...
随机推荐
- CAD安装失败怎样卸载CAD 2018?错误提示某些产品无法安装
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- PHPcms的安装步骤
http://www.phpcms.cn 制作良好习惯: 1.备份 2.随时保存 3.注释 在自己的PHP环境里 简历一个文件夹 比如命名为YiNong 访问安装地址,http://localhost ...
- linux程序分析工具介绍(三)——sar
本文要介绍的sar,是linux下用来分析系统本身运行情况的非常有用的工具.我们知道,程序在操作系统上要运行,要关注的点不外乎内存,CPU和IO(包括磁盘IO和网络IO).我们的应用程序在操作系统中运 ...
- c#-day01学习笔记
C#语言基础 .net之父--------安德斯/海尔斯伯格 .net是一个平台,一个集合,一个环境 .net出现的背景 .net的核心功能:能够在任何的时间,任何的地点,使用任何的设备,访问网络 . ...
- $.ajax、$.post[转]
jQuery.post( url, [data], [callback], [type] ) :使用POST方式来进行异步请求 参数: url (String) : 发送请求的URL地址. data ...
- vue2.0 $router和$route的区别
在vue2.0里页面参数是 this.$route.query或者 this.$route.params 接收router-link传的参数. 在路由跳转的时候除了用router-link标签以外需要 ...
- 《Cron表达式详解》
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth Month ...
- Android TextView之空格占位法
在Android布局中进行使用到空格,为了实现文字的对齐.具体要怎么使用了? •请忽视文中‘& #160’中&和#之间的空格 空格: & #160; 窄空格: & #8 ...
- Android基础Activity篇——Intent返回数据给上一个活动
1.如果活动B要将数据返回给活动A,那么需要以下三步: 1.1在活动A中使用startActivityForResult()方法启动活动B. 1.2在活动B中使用setResult()方法传回Iten ...
- Quick How-To deny/allow IP using iptables
How to block an IP using iptables? iptables -A INPUT -s xx.xx.xx.xx -j DROP How to block an IP for a ...