自己尝试等装一下恩美第二个APP项目控件类

ReactiveObjC的基本使用

2017-12-04  本文已影响60人  哈哈大p孩

关于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<RACSubscriber>  _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.监听方法

可以直接对某个控制器内部的方法进行操作一系列代码,挺牛b的.

[[h5VC rac_signalForSelector:@selector(viewWillAppear:)] subscribeNext:^(RACTuple * _Nullable x) {
                        //在viewwillappear的时候做一系列操作
                    }];

暂时先就这么多,以后再更新,很多可以举一反三的,非常强大,之前有接触过但没怎么用,现在也给我集成项目中了,除了能带来一些方便以外,确实还能解决一些我们平时无法做的的操作,所以我才用了0.0(当无计可施的时候,用了这个才发现有用呀)。

上一篇下一篇

猜你喜欢

热点阅读