




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、OverViewCocoa开发现状ReactiveCocoaMVVMDemo使用经验Cocoa开发现状需要考虑的情况是否已经登录是否已经赞过赞的过程中不能操作与服务端交互完成后改变赞的状态- (void)likeButtonTappedif (self.hasLoggedIn) else / popup a login view- (void)likeButtonTappedif (self.hasLoggedIn) if (!self.isLiking) else/ popup a login view- (void)likeButtonTappedif (self.hasLoggedIn)
2、 if (!self.isLiking) if (self.hasLiked) else else/ popup a login view-(void)likeButtonTappedif (self.hasLoggedIn) if (!self.isLiking) if (self.hasLiked)self.isLikingself.api=YES;plete:self.isLiking = NO; self.likeButton.highlighted = NO;plete: else self.isLiking = YES; self.apiself.isLiking = NO;sel
3、f.likeButton.highlighted = YES; else / popup a login viewStateThe Art of Unix Programming“编程的本质是控制复杂度”State能有效增加复杂度BOOL visible;2 statesBOOL enabled;4 statesBOOL highlighted;8 statesBOOL selected;16 statesState是一种缓存“There are only two hard things in Computer Science: cache invalidation and naming th
4、ings”Phil Karlton如何消灭/减少State?搞定产品经理只做简单的App改行换一种编程思路?ReactiveCocoa走出舒适区Shunryu Suzuki“In the beginners mind there are many possibilities, in the experts mind there are few.”Input - Process - OutputInput键盘输入点击手势操作网络请求磁盘DelegatetableView:didSelectRowAtIndexPathBlock Callbackplete:(NSArray*)-Actionlog
5、outButtonTapped:TimerstimerWithTimeInterval:selector:userInfo:repeats:KVOOutputUI的变化Model的变化网络请求CrashSignalviewWillAppearuserLoggedInfetchLatestData&CombineLatestRACSignalcombineLatest:viewWillAppearSignal, loggedInSignal subscribeNext:(id x) / fetch latestdata;networkErrorserverErrorpresentError|me
6、rgeRACSignalmerge:netErrorSignal, serverErrorSignal subscribeNext:(id x) / present Error;filtermapanyNumberSignal filter:BOOL(NSNumber *number) return number intValue % 2;&|&mand通常用来表示某个Action常常跟UIControl绑定使用有几个重要属性executingexecutionSignalserrorsMVVMMVVMDemoRACObserve(self, shouldPopLoginView) subsc
7、ribeNext:(id x) / pop up login view;RAC(self, likeButton.highlighted) = mand.executionSignalsswitchToLatestmap:id(id value) / handle result return YES; / or NO;self.mand = mand allocinitWithEnabled:mand.executing not signalBlock:RACSignal *(id input) if (!self.hasLoggedIn) self.shouldPopLoginView =
8、YES;mand execute:nil; else return nil;登录用户名登录登录用户名登录RAC(self.loginButton, enabled) = formValid;RACSignal *formValid = RACSignalcombineLatest: self.usernameField.rac_textSignal, self.passwordField.rac_textSignal,reduce:(NSString *name, NSString *password) return name.length & password.length;登录用户名登录R
9、ACSignal *textColor = executing map:(NSNumber *x) return x.boolValue ? gray : black;RAC(self.usernameField.textColor) = textColor; RAC(self.passwordField.textColor) = textColor;RACSignal *notProcessing = executing map:(NSNumber *x) return (!x.boolValue);RAC(self.usernameField.enabled) = notProcessin
10、g; RAC(self.password.enabled) = notProcessing;iPhotoiPhotoRACObserve(viewModel, indexPath) subscribeNext:(NSIndexPath *indexPath) self.collectionViewscrollToItemAtIndexPath:indexPath;CellViewModel *cvm = viewModel.cellViewModelsindexPath.row;cvm.active = YES; CellViewModel *lastActiveCVM =viewModel.
11、lastActiveCellViewModel;lastActiveCVM.active = NO;viewModel.lastActiveCellViewModel = cvm;iPhoto- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView/ 根据scrollView算出indexPath viewModel.indexPath = indexPath;- (void)collectionView:(UICollectionView *)collectionViewdidSelectItemAtIndexPath:(
12、NSIndexPath *)indexPath/ 处理viewModel.indexPath = indexPath;注意事项使用经验解题思路性能调试内存使用sendNextScheduler使用property还是signalProperty TableView的处理RAC在花瓣的使用场景解题思路百思不得解想到法,但好像不够RAC算了,时间有限,还是回到熟悉的编程模式吧性能subscribeNext很慢,比纯KVO慢了1个数量级接收到变化比较慢,比纯KVO慢了大约5倍调试signal subscribeNext:(id x);调试signal subscribeNext:(id x);sendNext由于ObjectiveC语言的限制,无法得知next的值到底是哪种类型,使用起来略有不便,需要看注释/代码,才能知道传的是什么值,然后手动转一下。SchedulerdeliverOn:subscribeOn:使用property还是signalProperty如无必要,使用正常的property即可,外部可以对它RACObserve或KVOTableView的处理把每个TableViewCell视为一个独立的View,也给它提供一个cellViewModel,而这个c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合伙养殖乌龟合同范本
- 水利施工合同范本
- 2025年-湖南建筑安全员-B证考试题库及答案
- 农村房屋装潢合同样本
- 出国劳务合同样本
- 兼职飞盘教练合同标准文本
- 运输设备修理行业跨境出海战略研究报告
- 影视广告行业直播电商战略研究报告
- 代理签字合同样本
- 买车合同样本300
- 湖南新高考教学教研联盟暨长郡二十校联盟2025届高三年级第二次联考历史试题及答案
- 高速公路工程质量管理制度汇编
- (二模)东北三省三校2025年高三第二次联合模拟考试 英语试卷(含答案解析)
- 2025年春形势与政策第二学期练习题、知识点梳理
- 2025年甘肃西北永新集团招聘11人笔试参考题库附带答案详解
- 雨水泵站机电设备安装工程施工方案52719
- 2025届浙江省杭州市下学期高三考前(二模)语文试题试卷含解析
- 北师大版四年级数学下学期月考质量评估课后辅导过关检测考试
- 2025 保健品行业专题报告:保健品蓝帽子九问九答
- 第二单元第1课《叶子的纹理》课件 一年级美术下册 浙美版
- 基于树枝振动特性的香榧采摘机设计
评论
0/150
提交评论