15.ReactiveCocoa

2018-04-30  本文已影响28人  阳明先生x

ReactiveCocoa简介

image

ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架,Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾。

image.png

响应式编程思想
响应式编程思想:不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,这些事件像流一样的传播出去,然后影响结果,借用面向对象的一句话,万物皆是流。

代表:KVO

学习 RAC 我们首先要了解 RAC 都有哪些类
RACSignal
RACSubject
RACSequence
RACMulticastConnection
RACCommand

导入ReactiveCocoa


ReactiveCocoa的GitHub地址
Objective-C
ReactiveCocoa 2.5版本以后改用了Swift,所以Objective-C项目需要导入2.5版本

CocoaPods集成:

platform :ios, '8.0'

target 'YouProjectName' do

use_frameworks!
pod 'ReactiveCocoa', '~> 2.5'

end
PS:新版本的CocoaPods需要加入

target 'YouProjectName' do
...
end

ReactiveCocoa常见类
RACSiganl 信号类
信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据,就会马上发出数据。

注意:

信号类(RACSiganl),只是表示当数据改变时,信号内部会发出数据,它本身不具备发送信号的能力,而是交给内部一个订阅者去发出。
默认一个信号都是冷信号,也就是值改变了,也不会触发,只有订阅了这个信号,这个信号才会变为热信号,值改变了才会触发。
如何订阅信号:调用信号RACSignal的subscribeNext就能订阅
使用:

// RACSignal使用步骤:
// 1.创建信号 + (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe
// 2.订阅信号,才会激活信号. - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock
// 3.发送信号 - (void)sendNext:(id)value

// RACSignal底层实现:
// 1.创建信号,首先把didSubscribe保存到信号中,还不会触发。
// 2.当信号被订阅,也就是调用signal的subscribeNext:nextBlock
// 2.2 subscribeNext内部会创建订阅者subscriber,并且把nextBlock保存到subscriber中。
// 2.1 subscribeNext内部会调用siganl的didSubscribe
// 3.siganl的didSubscribe中调用[subscriber sendNext:@1];
// 3.1 sendNext底层其实就是执行subscriber的nextBlock

// 1.创建信号
RACSignal *siganl = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {

    // block调用时刻:每当有订阅者订阅信号,就会调用block。

    // 2.发送信号
    [subscriber sendNext:@1];

    // 如果不在发送数据,最好发送信号完成,内部会自动调用[RACDisposable disposable]取消订阅信号。
    [subscriber sendCompleted];

    return [RACDisposable disposableWithBlock:^{

        // block调用时刻:当信号发送完成或者发送错误,就会自动执行这个block,取消订阅信号。

        // 执行完Block后,当前信号就不在被订阅了。

        NSLog(@"信号被销毁");

    }];
}];

// 3.订阅信号,才会激活信号.
[siganl subscribeNext:^(id x) {
    // block调用时刻:每当有信号发出数据,就会调用block.
    NSLog(@"接收到数据:%@",x);
}];

https://blog.csdn.net/wzc10101415/article/details/55051339

https://www.cnblogs.com/ningmengcao-ios/p/6803878.html

最快让你上手ReactiveCocoa之基础篇

最快让你上手ReactiveCocoa之进阶篇

上一篇下一篇

猜你喜欢

热点阅读