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审核一直是每款移动产品上架苹果商店时面对的一座大山,每次提审都像是一次漫长而又悲壮的旅行,经常被苹果拒之门外,无比煎熬.那么问题来了,我们有没有什么办法准确把握苹果审核准则,从而提升审核的通过率 ...
随机推荐
- Ruby应用记录:修改文件中某个字符串
#修改android客户端中服务器地址的默认值为对应环境的服务器地址 #!/usr/bin/ruby ostr="192.168.88.95:8088" nstr="19 ...
- 设计模式_Adapt
一个形象的例子: (ADAPTER)在朋友聚会上碰到了一个美女Sarah,从香港来的,可我不会说粤语,她不会说普通话,只好求助于我的朋友kent了,他作为我和Sarah之间的Adapter,让我和Sa ...
- APMServ5.2.6 + xdebug + notepad++调试环境配置
(原创文章,转载请注明出处:http://www.cnblogs.com/qzhforthelife/archive/2013/06/21/3147772.html) 刚整了两个多小时才把这个调试环境 ...
- Git log高级用法
格式化Log输出 首先,这篇文章会展示几种git log格式化输出的例子.大多数例子只是通过标记向git log请求或多或少的信息. 如果你不喜欢默认的git log格式,你可以用git config ...
- tail -f logfile.log 一直监控某个文件,若该文件有改动,立即在屏幕上输出
tail -f logfile.log 可以一直监控某个文件,只要文件有改动,就立即在屏幕上输出
- MultiTouch camera controls source code
http://www.jpct.net/wiki/index.php/MultiTouch_camera_controls MultiTouch camera controls This code w ...
- JS自定义事件(Dom3级事件下)
原文出处: http://www.w3cfuns.com/notes/11861/e21736a0b15bceca0dc7f76d77c2fb5a.html . 我拿出作者中的一段,感谢作者原创. ...
- php的fread函数的一个巨大的坑
先看看fread的manual,如下: http://php.net/manual/en/function.fread.php fread() reads up to length bytes fro ...
- OpenCV2马拉松第22圈——Hough变换直线检測原理与实现
计算机视觉讨论群162501053 转载请注明:http://blog.csdn.net/abcd1992719g/article/details/27220445 收入囊中 Hough变换 概率Ho ...
- cocos js响应过程
使用ccbi: js加载ccbi时候,会调用CCBReader的函数readNodeGraphFromData,从根节点递归解析子节点,使用readNodeGraph函数解析单个节点. 当碰到CCMe ...