//1.创建信号 RACSignal *signal = [RACSignal createSignal:^RACDisposable *(idsubscriber) {
//3.发送信号
[subscriber sendNext:@"发送信号"];
/**
如果不在发送数据,最好发送信号完成,内部会自动调用[RACDisposable disposable]取消订阅信号
*/
[subscriber sendCompleted];
//取消订阅方法
return [RACDisposable disposableWithBlock:^{
//block调用时刻:当信号发送完成或者发送错误,就会自动执行这个block,取消订阅信号
// 执行完Block后,当前信号就不在被订阅了。
NSLog(@"信号销毁了");
}];
}];
//2.订阅信号
[signal subscribeNext:^(id x) {
NSLog(@"订阅信号:%@",x);
}];
[[_userNameTextField rac_textSignal] subscribeNext:^(NSString *x) {
NSLog(@"文本框文字发生了改变:%@",x);
}];
// 通过RAC提供的宏快速实现textSingel的监听
// RAC(TARGET, [KEYPATH, [NIL_VALUE]]):用于给某个对象的某个属性绑定。
// 当textField的文字发生改变时,label的文字也发生改变
RAC(self.userNameTextField,text) = self.userNameTextField.rac_textSignal;
// 监听手势
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] init];
[[tapGesture rac_gestureSignal] subscribeNext:^(id x) {
NSLog(@"view被触发tap手势");
}];
[self.view addGestureRecognizer:tapGesture];
self.view.userInteractionEnabled = YES;
// 过滤器
[[self.userNameTextField.rac_textSignal filter:^BOOL(NSString *value) {
//大于或者等于3 -->往下走。go
return value.length >= 3;
}] subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
[[_LoginClick rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
NSLog(@"按钮被点击");
}];
// 监听对象的属性值改变,转换成信号,只要值改变就会发送信号
[[View rac_valuesAndChangesForKeyPath:@"x" options:NSKeyValueObservingOptionNew observer:nil] subscribeNext:^(id x) {
NSLog(@"view的x值发生了改变");
}];
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillShowNotification object:nil] subscribeNext:^(id x) {
NSLog(@"键盘将要出现");
}];
// 通过RAC提供的宏快速实现观察者模式
// RACObserve(self, name):监听某个对象的某个属性,返回的是信号。
[RACObserve(self.userNameTextField,self.userNameTextField.text.length) subscribeNext:^(id x) {
NSLog(@"绿色view的x方向发生改变");
}];
[[_LoginClick rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
// STRONG
UserModel *wxModel = [UserModel new];
wxModel.userName = _userNameTextField.text;
wxModel.psWord = _passWordTextField.text;
[[LoginModel singalForLogin:wxModel] subscribeNext:^(NSNumber *x) {
NSLog(@"xx= %@",x);
// STRONG
// if (x.boolValue) {
// [self goback];
// }
} error:^(NSError *error) {
}];
}];