版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、OverViewCocoa開發(fā)現(xiàn)狀ReactiveCocoaMVVMDemo使用經(jīng)驗Cocoa開發(fā)現(xiàn)狀需要考慮的情況是否已經(jīng)登錄是否已經(jīng)贊過贊的過程中不能操作與服務(wù)端交互完成后改變贊的狀態(tài)- (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“編程的本質(zhì)是控制復(fù)雜度”State能有效增加復(fù)雜度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?搞定產(chǎn)品經(jīng)理只做簡單的App改行換一種編程思路?ReactiveCocoa走出舒適區(qū)Shunryu Suzuki“In the beginners mind there are many possibilities, in the experts mind there are few.”Input - Process - OutputInput鍵盤輸入點擊手勢操作網(wǎng)絡(luò)請求磁盤DelegatetableView:didSelectRowAtIndexPathBlock Callbackplete:(NSArray*)-Actionlog
5、outButtonTapped:TimerstimerWithTimeInterval:selector:userInfo:repeats:KVOOutputUI的變化Model的變化網(wǎng)絡(luò)請求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/ 根據(jù)scrollView算出indexPath viewModel.indexPath = indexPath;- (void)collectionView:(UICollectionView *)collectionViewdidSelectItemAtIndexPath:(
12、NSIndexPath *)indexPath/ 處理viewModel.indexPath = indexPath;注意事項使用經(jīng)驗解題思路性能調(diào)試內(nèi)存使用sendNextScheduler使用property還是signalProperty TableView的處理RAC在花瓣的使用場景解題思路百思不得解想到法,但好像不夠RAC算了,時間有限,還是回到熟悉的編程模式吧性能subscribeNext很慢,比純KVO慢了1個數(shù)量級接收到變化比較慢,比純KVO慢了大約5倍調(diào)試signal subscribeNext:(id x);調(diào)試signal subscribeNext:(id x);sendNext由于ObjectiveC語言的限制,無法得知next的值到底是哪種類型,使用起來略有不便,需要看注釋/代碼,才能知道傳的是什么值,然后手動轉(zhuǎn)一下。SchedulerdeliverOn:subscribeOn:使用property還是signalProperty如無必要,使用正常的property即可,外部可以對它RACObserve或KVOTableView的處理把每個TableViewCell視為一個獨立的View,也給它提供一個cellViewModel,而這個c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- LY/T 3418-2024林草電子公文處理流程及系統(tǒng)運行管理規(guī)范
- 四年級數(shù)學(xué)上聽評課記錄
- 湘教版數(shù)學(xué)七年級下冊3.2《提多項式公因式》聽評課記錄
- 生活保障信托協(xié)議書(2篇)
- 環(huán)保工程承包協(xié)議書
- 新版湘教版秋八年級數(shù)學(xué)上冊第三章實數(shù)課題實數(shù)的運算和大小比較聽評課記錄
- 人教部編版七年級道德與法治上冊:6.2《師生交往》聽課評課記錄1
- 湘教版數(shù)學(xué)七年級下冊《4.2 平移》聽評課記錄
- 浙教版數(shù)學(xué)七年級下冊《閱讀材料 楊輝三角與兩數(shù)和的乘方》聽評課記錄2
- 新北師大版小學(xué)數(shù)學(xué)一年級上冊《教室》聽評課記錄
- 二零二五年度電梯安裝工程監(jiān)理合同4篇
- 2025年中國儲備棉管理有限公司招聘筆試參考題庫含答案解析
- 2025年華能新能源股份有限公司招聘筆試參考題庫含答案解析
- 《中國心力衰竭診斷和治療指南(2024)》解讀完整版
- 初中教學(xué)常規(guī)培訓(xùn)
- 《建筑平面圖的繪制》課件
- 醫(yī)院審計科科長述職報告
- 《檔案管理課件》課件
- 2024年度中國共產(chǎn)主義共青團團課課件版
- 2025年中考物理終極押題猜想(新疆卷)(全解全析)
- 1《讀懂彼此的心》(說課稿)2023-2024學(xué)年統(tǒng)編版道德與法治五年級下冊
評論
0/150
提交評論