//1.創(chuàng)建信號(hào)? ? RACSignal *signal = [RACSignal createSignal:^RACDisposable *(idsubscriber) {
//3.發(fā)送信號(hào)
[subscriber sendNext:@"發(fā)送信號(hào)"];
/**
如果不在發(fā)送數(shù)據(jù),最好發(fā)送信號(hào)完成,內(nèi)部會(huì)自動(dòng)調(diào)用[RACDisposable disposable]取消訂閱信號(hào)
*/
[subscriber sendCompleted];
//取消訂閱方法
return [RACDisposable disposableWithBlock:^{
//block調(diào)用時(shí)刻:當(dāng)信號(hào)發(fā)送完成或者發(fā)送錯(cuò)誤,就會(huì)自動(dòng)執(zhí)行這個(gè)block,取消訂閱信號(hào)
// 執(zhí)行完Block后,當(dāng)前信號(hào)就不在被訂閱了。
NSLog(@"信號(hào)銷毀了");
}];
}];
//2.訂閱信號(hào)
[signal subscribeNext:^(id x) {
NSLog(@"訂閱信號(hào):%@",x);
}];
[[_userNameTextField rac_textSignal] subscribeNext:^(NSString *x) {
NSLog(@"文本框文字發(fā)生了改變:%@",x);
}];
//? ? 通過RAC提供的宏快速實(shí)現(xiàn)textSingel的監(jiān)聽
//? ? RAC(TARGET, [KEYPATH, [NIL_VALUE]]):用于給某個(gè)對(duì)象的某個(gè)屬性綁定。
//? ? 當(dāng)textField的文字發(fā)生改變時(shí),label的文字也發(fā)生改變
RAC(self.userNameTextField,text) = self.userNameTextField.rac_textSignal;
//? ? 監(jiān)聽手勢(shì)
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] init];
[[tapGesture rac_gestureSignal] subscribeNext:^(id x) {
NSLog(@"view被觸發(fā)tap手勢(shì)");
}];
[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(@"按鈕被點(diǎn)擊");
}];
//? ? ? 監(jiān)聽對(duì)象的屬性值改變,轉(zhuǎn)換成信號(hào),只要值改變就會(huì)發(fā)送信號(hào)
[[View rac_valuesAndChangesForKeyPath:@"x" options:NSKeyValueObservingOptionNew observer:nil] subscribeNext:^(id x) {
NSLog(@"view的x值發(fā)生了改變");
}];
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillShowNotification object:nil] subscribeNext:^(id x) {
NSLog(@"鍵盤將要出現(xiàn)");
}];
//? ? 通過RAC提供的宏快速實(shí)現(xiàn)觀察者模式
//? ? RACObserve(self, name):監(jiān)聽某個(gè)對(duì)象的某個(gè)屬性,返回的是信號(hào)。
[RACObserve(self.userNameTextField,self.userNameTextField.text.length) subscribeNext:^(id x) {
NSLog(@"綠色view的x方向發(fā)生改變");
}];
[[_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) {
}];
}];