ios ReactiveViewModel
项目中使用 ReactiveCocoa 一般都会嵌入ReactiveViewModel 或者 ReactiveCocoaLayout 联合处理UI、网络、动画、布局、窗口切换等,组合使用时威力惊人。
github地址:https://github.com/ReactiveCocoa/ReactiveViewModel
https://github.com/ReactiveCocoa/ReactiveCocoaLayout
官网介绍主要优点:
1.视图模型是可测试的。因为他们并不需要一个视图来做好自己的工作,演示行为没有任何的UI自动化或存根进行测试。
2.查看模型可用于像模型。如果需要,视图模型可以被复制或序列化就像一个领域模型。这可以用来快速地实现UI修复及类似行为。
3.视图模型(大部分)平台无关的。由于实际的UI代码住在视图中,精心设计视图模型可以用来在iPhone ,iPad和Mac的,只有轻微的调整为每个平台。
4.视图和视图控制器简单。一旦重要的逻辑移到别处,意见和风险投资成为愚蠢的UI对象。这使得他们更容易理解和重新设计。
总之,随着MVVM取代MVC可能导致更多的灵活和严格的UI代码
MVVM是一个功能强大的数据绑定系统最成功的。 ReactiveCocoa是一个这样的系统。
通过模拟变化的信号,视图模型可在不实际需要知道它的存在(同样为模型→视图模型通信)进行通信的看法。这种分离是为什么视图模型可以在未达成视图进行测试 - 测试只需要连接到虚拟机的信号,并验证行为是正确的。
如果各位做过wpf、Silverlight 开发,就明白其中binding,action 实现所在了。
看看具体实例:
结构:
-ASHDetailViewController.h
-ASHDetailViewController.m
-ASHDetailViewModel.h -> RVMViewModel.h
-ASHDetailViewModel.m
........
Viewcontroller:
@class ASHDetailViewModel; @interface ASHDetailViewController : UIViewController @property (strong, nonatomic) ASHDetailViewModel *viewModel; @end
Model:
#import "RVMViewModel.h" @class ASHTimerViewModel; @interface ASHDetailViewModel : RVMViewModel @property (nonatomic, readonly) NSString *recipeName;
@property (nonatomic, readonly) NSString *recipeDescription;
@property (nonatomic, readonly) NSString *recipeFilmTypeString; @property (nonatomic, readonly) NSInteger numberOfSteps;
@property (nonatomic, readonly) BOOL canStartTimer; -(NSString *)titleForStepAtIndex:(NSInteger)index;
-(NSString *)subtitleForStepAtIndex:(NSInteger)index; -(ASHTimerViewModel *)timerViewModel; @end
Navigation:
#pragma mark - Navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"showDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
ASHDetailViewController *viewController = segue.destinationViewController;
viewController.viewModel = [self.viewModel detailViewModelForIndexPath:indexPath];
}
}
/*!
*
// Whether the view model is currently "active."
//
// This generally implies that the associated view is visible. When set to NO,
// the view model should throttle or cancel low-priority or UI-related work.
//
// This property defaults to NO.
*/
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated]; self.viewModel.active = YES;
}
ios ReactiveViewModel的更多相关文章
- iOS开发之ReactiveCocoa下的MVVM(干货分享)
最近工作比较忙,但还是出来更新博客了,今天给大家分享一些ReactiveCocoa以及MVVM的一些东西,干活还是比较足的.在之前发表过一篇博文,名字叫做<iOS开发之浅谈MVVM的架构设计与团 ...
- iOS开发之ReactiveCocoa下的MVVM
最近工作比较忙,但还是出来更新博客了,今天给大家分享一些ReactiveCocoa以及MVVM的一些东西,干活还是比较足的.在之前发表过一篇博文,名字叫做<iOS开发之浅谈MVVM的架构设计与团 ...
- iOS可视化动态绘制连通图
上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...
- 【疯狂造轮子-iOS】JSON转Model系列之二
[疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...
- 【疯狂造轮子-iOS】JSON转Model系列之一
[疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...
- iOS总结_UI层自我复习总结
UI层复习笔记 在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是 ...
- iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
- JS调用Android、Ios原生控件
在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...
- 告别被拒,如何提升iOS审核通过率(上篇)
iOS审核一直是每款移动产品上架苹果商店时面对的一座大山,每次提审都像是一次漫长而又悲壮的旅行,经常被苹果拒之门外,无比煎熬.那么问题来了,我们有没有什么办法准确把握苹果审核准则,从而提升审核的通过率 ...
随机推荐
- [Buffalo] 一些SQL函数
取得当前时间的函数:GETDATE() 计算时间的函数:DATEADD(datepart,number,date) 计算两个时间差额:DATEDIFF(datepart,startdate,endda ...
- 自动测试框架(by myself)
这段日子以来一直在自动话测试,然后关于框架一直有个很模糊的概念,通过N多人的解说,这个应该不能算是一个框架,但是还是很模糊 如下图是我自己认为的框架,不知道是否正确(请大侠们多多指点) 1.用nuni ...
- 从 NavMesh 网格寻路回归到 Grid 网格寻路。
上一个项目的寻路方案是客户端和服务器都采用了 NavMesh 作为解决方案,当时的那几篇文章(一,二,三)是很多网友留言和后台发消息询问最多的,看来这个方案有着广泛的需求.但因为是商业项目,我无法贴出 ...
- (3)I2C总线的字节格式,时钟同步和仲裁
字节格式 发送到SDA线上的每个字节必须是8位.每次传输的字节数量是不受限制的.每个字节后必须跟着一个ACK应答位.数据从最高有效位(MSB)开始传输.如果从机要执行一些功能后才能接收或者发送新的完整 ...
- MYSQL存储过程中的IN、OUT和INOUT
MYSQL存储过程中的IN.OUT和INOUT,不能简单理解为一个方法的参数和返回值,而是面向整个过程上下文变量的. 一.MySQL 存储过程参数(in) 基本可以理解为传入function的参数,而 ...
- mac osx App store 安装软件 发生错误
app store 安装软件时发生错误 解决办法: 1. 进入如下目录: sh-3.2# cd Library/Application\ Support/App\ Store/ sh-3.2# pwd ...
- yii 获取系统级请求参数的常用方法
1.GET/POST 1.1.获取GET/POST过来的数据 Yii::app()->request->getParam('id'); 1.2.判断数据提交方式 Yii::app()-&g ...
- 【OpenCV学习笔记】之六 手写图像旋转函数---万丈高楼平地起
话说,平凡之处显真格,这一点也没错! 比如,对旋转图像进行双线性插值,很简单吧? 可,对我,折腾了大半天,也没有达到预期效果! 尤其是三个误区让我抓瞎好久: 1,坐标旋转公式. 这东西,要用 ...
- 解决linux redhat6下安装git的问题
今天用到linux上的git安装过程比较曲折,记录一下: 首先会报需要perl rpm -ivh git-1.7.1-14.2.x86_64.rpm warning: git-1.7.1-14.2.x ...
- redis远程连接超时
今天在用jedis连接远程的redis时,抛出连接超时异常:connect timed out. 详细信息例如以下: Exception in thread "main" r ...