ReactiveObjCの基本使用

2466 ワード

ReactiveObjCの使用については、実は16年の時点ですでに開発者たちによって使用されており、これまで触れられていなかったのですが、最近プロジェクトを書いたときに、このダイナミックレスポンスチェーンのフレームワークについていくつかの理解があり、確かに非常に乱暴で強く、ここでは基本的な使用を記録します.
1.代替delegate
エージェントの代わりにRACSubject信号を作成するには、次のようにします.
/*      */
RACSubject *subject = [RACSubject subject];

/*      */
[subject sendNext:@"    "];

別の場所で使う場合
/*     (             ,        ) */
[subject subscribeNext:^(id  _Nullable x) {

    NSLog(@"    :%@", x);
}];

2.信号の削除
信号は一般的に作成されると、グローバルに相当するため、このオブジェクトの信号がオブジェクトとともに解放されない場合、グローバルはいつでもこの信号源をトリガすることができる.(一般的にはナビゲーションバーに信号源をモニタし、あるページでこの信号源を解放しなければ、グローバルなナビゲーションバーはナビゲーションバーメソッドをトリガするだけで、この信号源をトリガする)
/*      */
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id  _Nonnull subscriber) {

    /*      */
    [subscriber sendNext:@"    "];

    return nil;
}];

/*      */
RACDisposable *disposable = [signal subscribeNext:^(id  _Nullable x) {

    NSLog(@"    :%@", x);
}];

/*      */
[disposable dispose];


3.TextFieldの入力変更をリスニングする(他のコントロールの差が少ない使用方法、ここでは例を挙げる)
/*    TextField    (        ) */
[[textField rac_textSignal] subscribeNext:^(NSString * _Nullable x) {

    NSLog(@"     :%@", x);
}];

/*        */
[[textField.rac_textSignal filter:^BOOL(NSString * _Nullable value) {

    return value.length > 5; //          > 5          block

}] subscribeNext:^(NSString * _Nullable x) {

     NSLog(@"     :%@", x);
}];

4.エージェントKVOリスニング
KVO傍受の代わりに、以下に傍受viewのframe属性を信号に変換し、値が変化すれば信号を送信することを示す.
[[view rac_valuesForKeyPath:@"frame" observer:self] subscribeNext:^(id  _Nullable x) {

    NSLog(@"     :%@", x); // x           
}];

もう一つの簡単な書き方は、RACのマクロを利用して、上の効果と同じです.[RACObserve(view, frame) subscribeNext:^(id _Nullable x) {
NSLog(@"     :%@", x); // x           

}];
5.傍受方法
あるコントローラの内部の方法に対して一連のコードを直接操作することができ、すごいです.
[[h5VC rac_signalForSelector:@selector(viewWillAppear:)] subscribeNext:^(RACTuple * _Nullable x) {
                        // viewwillappear         
                    }];

しばらくはこのように多くて、后で更に更新して、多くは1対3を挙げることができて、とても强大で、前に接触したことがありますがあまり役に立たなくて、今も私に集积のプロジェクトの中で、いくつかの便利さをもたらすことができる以外に、确かにいくつか私达のふだんすることができない操作を解决することができて、だから私は0.0(どうしようもない时、これを使ってやっと役に立つことを発见します).