ReactiveCocoa 實用指南之入門
最近我正在找工作,發現很多公司並沒有使用RAC,我就在面試的時候順便建議他們使用RAC。然後回來後突然有想寫一篇關於RAC的慾望了。看這篇文章的人應該屬於iOS進階了,我個人不太建議剛入門iOS的人看這篇文章。首先ReactiveCocoa(簡稱RAC)這個知識點完全顛覆了我們之前寫程式碼的習慣,所以新手看到文章很容易誤導他們從而基礎知識不夠牢固,這純粹是我個人的建議。很多人說ReactiveCocoa很重,之所以說它很重的一個重要原因是學習成本很高,我相信大家看完這篇文章之後就不會覺得很難了,也希望大家的專案裡能夠用到ReactiveCocoa。
ReactiveCocoa是Mattt Thompson大神寫的一個框架,結合了函數語言程式設計和響應式程式設計的思想。非常符合我們開發中高聚合,低耦合的思想。我們可以用它做很多東西,下面會給大家一一介紹。ReactiveCocoa的github主頁點這裡。
- 文字框事件:
我們之前是這樣寫的
UITextField * textField = [[UITextField alloc]init];
textField.backgroundColor = [UIColor cyanColor];
[self.view addSubview:textField];
textField.frame = CGRectMake(100, 100, 200, 40);
[textField addTarget:self action:@selector(textChanged:) forControlEvents:UIControlEventEditingChanged];
- (void)textChanged:(UITextField *)textField
{
NSLog(@"%@",textField);
}
我們用RAC可以這樣寫
//第一種方法
[[textField rac_signalForControlEvents:UIControlEventEditingChanged]
subscribeNext:^(NSString * x) {
NSLog(@"x= %@",x);
}];
//第二種方法
[textField.rac_textSignal subscribeNext:^(NSString * x) {
NSLog(@"x = %@",x);
}];
2.手勢
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]init];
[[tap rac_gestureSignal] subscribeNext:^(UITapGestureRecognizer * tap) {
NSLog(@"tap = %@",tap);
}];
[self.view addGestureRecognizer:tap];
3.通知
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil] subscribeNext:^(NSNotification * notification) {
NSLog(@"noti = %@",notification);
}];
//不需要removeObserver,RAC內部已經幫我們呼叫了removeObserver
4.定時器
// 1. 延遲某個時間後再做某件事
[[RACScheduler mainThreadScheduler]afterDelay:2 schedule:^{
NSLog(@"你好RAC");
}];
// 2. 每個一定長度時間做一件事
[[RACSignal interval:1 onScheduler:[RACScheduler mainThreadScheduler]]subscribeNext:^(NSDate * date) {
NSLog(@"date = %@",date);
}];
5.代理(有侷限,只能取代沒有返回值的代理方法)
UIAlertView * alertView = [[UIAlertView alloc]initWithTitle:@"RAC" message:@"ReactiveCocoa" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ensure", nil];
[alertView show];
[[alertView rac_buttonClickedSignal]subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
5.KVO
UIScrollView * scrollView = [[UIScrollView alloc]init];
scrollView.delegate = (id<UIScrollViewDelegate>)self;
[self.view addSubview:scrollView];
scrollView.frame = CGRectMake(80, 80, 80, 80);
scrollView.contentSize = CGSizeMake(160, 160);
scrollView.backgroundColor = [UIColor redColor];
[RACObserve(scrollView, contentOffset) subscribeNext:^(id x) {
NSLog(@"x = %@",x);
}];
以上都是可以死記硬背的,上面的那些內容已經可以幫我們解決很多問題了,但是RAC的知識廣度還遠遠不止這些,接下來的一篇將給大家介紹RAC比較高階的東西了。
微博賬號:梅嘉慶(點選關注)
相關文章
- React實戰入門指南React
- PHP 之 Composer 新手入門指南PHP
- Flutter 入門之 ListTile 使用指南Flutter
- LeetCode入門指南 之 排序LeetCode排序
- iOS學習筆記39 ReactiveCocoa入門iOS筆記React
- PM2入門實踐指南
- DevExpress WPF入門指南:DXWindow應用devExpress
- nginx實用入門Nginx
- LeetCode入門指南 之 連結串列LeetCode
- 踩坑指南:入門OpenTenBase之部署篇
- Zookeeper入門指南
- CPack 入門指南
- Docker 入門指南Docker
- numpy入門指南
- EOS 入門指南
- Vue 入門指南Vue
- RabbitMQ入門指南MQ
- Nginx入門指南Nginx
- Vagrant 入門指南
- React 入門指南React
- Flask 入門指南Flask
- gulp入門指南
- OSWorkFlow入門指南
- CouchDB 入門指南
- RxJava入門指南RxJava
- ODA入門指南
- MySQL 入門指南MySql
- Markdown入門指南
- DevExpress WPF入門指南:載入動畫的應用devExpress動畫
- LeetCode入門指南 之 二叉樹LeetCode二叉樹
- LeetCode入門指南 之 棧和佇列LeetCode佇列
- 踩坑指南:入門OpenTenBase之監控篇
- ReactiveCocoa入門教程——第二部分(轉)React
- Python實時物件檢測入門指南Python物件
- 教程:Apache Spark SQL入門及實踐指南!ApacheSparkSQL
- KNIME快速入門指南
- Markdown快速入門指南
- CodeMirror入門指南