移動互聯(lián)網(wǎng)一浪高過一浪專題打包archszlizhong_第1頁
移動互聯(lián)網(wǎng)一浪高過一浪專題打包archszlizhong_第2頁
移動互聯(lián)網(wǎng)一浪高過一浪專題打包archszlizhong_第3頁
移動互聯(lián)網(wǎng)一浪高過一浪專題打包archszlizhong_第4頁
移動互聯(lián)網(wǎng)一浪高過一浪專題打包archszlizhong_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論