ReactiveCocoa使用详解
2016-05-18 16:21
645 查看
ReactiveCocoa是基于响应式编程的实践,使用起来很方便,下面将讲解详细使用。
1.监听对象的成员变量变化,当成员变量值被改变时,触发做一些事情.A)普通属性@property(nonatomic,copy) NSString *changeinput;[RACObserve(self, changeinput) subscribeNext:^(id x) {NSLog(@"成员变量 changeinput 被修改成了:%@", x);}];当在其他地方修改了changeinput的属性值,将会调用。B)如何监听控件的值变化,[[self.textfiled.rac_textSignalfilter:^(NSString *str) {if (str.integerValue > 30) {return YES;} else {return NO;}}]subscribeNext:^(NSString *str) {NSLog(@"textfield 控件变化了:%@",str);}];2. 属性绑定,转换数据流A)//直接绑定RAC(self.loginButton,enabled) = RACObserve(self,isCanLogin);;//需要转换数据流,让输入和alpha绑定,当输入为12时,透明度为1.0 否则是0.5RACSignal *changeSignal = RACObserve(self,changeinput);RAC(self.loginButton, alpha) = [changeSignalmap:^id(NSString *str) {return [str isEqualToString:@"12"] ? @1.0 : @0.5;}];B)两个输入,按钮之间的绑定关系,当输入长度大于5时,按钮可点击RACSignal *validUsernameSignal = [self.textfiled.rac_textSignal map:^id(NSString *text) {return @(text.length >5);}];RACSignal *validPasswordSignal = [self.passwordTextfield.rac_textSignal map:^id(NSString *text) {return @(text.length >5);}];RACSignal *signUpActiveSignal = [RACSignal combineLatest:@[validUsernameSignal, validPasswordSignal]reduce:^id(NSNumber *usernameValid, NSNumber *passwordValid){return @([usernameValid boolValue] && [passwordValid boolValue]);}];[signUpActiveSignal subscribeNext:^(NSNumber *signupActive) {self.loginButton.enabled = [signupActive boolValue];}];3.两个控件之间的绑定关系,如输入框输入,label显示输入结果RAC(self.outputLabel,text) = self.textfiled.rac_textSignal;或者也可以和一个属性值绑定,当changeinput改变时,outputLabel也会发生改变,RAC(self.outputLabel, text) = RACObserve(self, changeinput);4.事件监听- (void)eventListener{RACSignal *buttonSignal = [self.signalButton rac_signalForControlEvents:UIControlEventTouchUpInside];[buttonSignal subscribeNext:^(id x) {NSLog(@"buttonSignal %@",buttonSignal);}];RACSignal *textChange = [self.passwordTextfield rac_textSignal];[textChange subscribeNext:^(NSString *textfield){NSLog(@"textfield %@", textfield);}];RACSignal *viewAppeared = [self rac_signalForSelector:@selector(viewDidAppear:)];[viewAppeared subscribeNext:^(id x) {NSLog(@"viewDidAppear %@", x);}];}5.其它的一些用法如,A)添加观察者[[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"MyNotification" object:nil] subscribeNext:^(NSNotification *notification) {NSLog(@"Notification Received");}];B)object的dealloc被触发时,执行的一段代码,这样很方便吧 NSArray *array = @[@"foo"];[[array rac_willDeallocSignal] subscribeCompleted:^ { NSLog(@"will dealloc");}];array = nil;相关文章推荐
- ReactiveCocoa
- [React Native iOS真机运行输出]Could not connect to development server.
- 使用Gulp和Browserify来搭建React应用程序
- React Native那些事
- reactJS的return里面不要有分号
- [转载]React.js 2016 最佳实践
- React和Redux的连接react-redux
- Reactor模式与Proactor模式
- Reactor模式和Proactor模式
- React学习笔记
- 初识React,Virutal DOM, State以及生命周期
- ReactiveCocoa核心方法bind(绑定)
- ReactNative 使用微软的CodePush进行热更新,继续填坑
- ReactNative浅谈
- React-native windows下android开发入门
- ReactNative 当前url和cookies的获取
- ReactNative 适合初学的第一个教程demo,找租房
- ReactJS读书笔记:DOM操作
- ReactJS学习笔记:感想 - 为什么说Virtual DOM 是React的精髓所在
- ReactJS学习笔记:表单