iOS【RAC】初识RAC

今天来了解一下RAC

  • Block简单使用
  • RAC简介
  • RACSignal类
  • RACDisposable
  • RACSubject

 一、Block简单使用

  • 有时候我们忘记了block的格式,这时,敲一个inlineBlock,就会出来
  • block:ARC使用strong ,非ARC使用copy

1、block作为对象的属性

/******************* Person.h **********************************/

#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (nonatomic,strong) void(^AMYBlock)(void);
@end

/******************* ViewController.m **********************************/

#import "ViewController.h"
#import "Person.h"
@interface ViewController ()
@property (nonatomic,strong)Person *p;
@end
@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //1、Block作为对象的属性
    Person *p = [[Person alloc]init];
    void(^block)(void) = ^() {
        NSLog(@"block");
    };
    p.AMYBlock = block;
    _p=p; //_p直接拿成员变量
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    self.p.AMYBlock();//self.p通过get方法拿
}
- (void)didReceiveMemoryWarning{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

 2、block作为方法的参数

/****************** Person.h **********************/

#import <Foundation/Foundation.h>
@interface Person : NSObject
-(void)eat:(void(^)(NSString*))block;
@end

/****************** Person.m **********************/

#import "Person.h"
@implementation Person
-(void)eat:(void (^)(NSString *))block{
    block(@"苹果");
}
@end

/***************** ViewController.m ***********************/

#import "ViewController.h"
#import "Person.h"
@interface ViewController ()
@property (nonatomic,strong)Person *p;
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //Block作为方法的参数
    Person *p = [[Person alloc]init];
    [p eat:^(NSString *s) {
        NSLog(@"爱吃%@",s);
    }];
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end

 3、block作为返回值(扩展非常强)

/**************** Person.h ***************************/

#import <Foundation/Foundation.h>
@interface Person : NSObject
-(void(^)(int))run;
@end

/***************** Person.m **************************/

#import "Person.h"
@implementation Person
-(void(^)(int))run{
    return ^(int m){
        NSLog(@"跑起来了!!%d",m);
    };
}
@end

/**************** ViewController.m ***************************/

#import "ViewController.h"
#import "Person.h"
@interface ViewController ()
@property (nonatomic,strong)Person *p;
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    //Block作为方法的参数
    Person *p = [[Person alloc]init];
    p.run(100);
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end

二、RAC简介

1、RAC是什么?

  • RAC — ReactiveCocoa(RAC)  Github 一个开源框架!!
  • RAC — 函数响应编程框架!!

2、RAC有什么用?

  • 帮助我们更简单霸气的处理事件!!

3、RAC的引入

XXXXXXXXXXXXXXXXXXXXXXX

4、RAC里面最常见和常用的类

  • RACSignal
  • RACDisposable
  • RACSubscriber
  • RACSubject

三、RACSignal类(信号类!)

使用:

(1)通过RACSignal创建一个信号!! (默认是: 冷信号!!)

(2)通过订阅者!订阅这个信号!(变成: 热信号!!)

(3)发送信号!!

引入ReactiveObjC后:

#import "ViewController.h"
#import <ReactiveObjC/ReactiveObjC.h>
@interface ViewController ()
@end

@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //RACSignal:信号类,当我们有数据产生,创建一个信号!! //(1)通过RACSignal创建一个信号!! (默认是: 冷信号!!) //didSubscribe调用:只要这个信号被订阅就会调用 //didSubscribe作用:利用subscriber发送数据 RACSignal *signal =[RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) { //(3)发送信号!!,subscriber它来发送 [subscriber sendNext:@"呵呵哈哈嘿嘿"]; return nil; }]; //(2)通过订阅者!订阅这个信号!(变成: 热信号!!) //nextBlock调用:只要订阅者发送数据就会调用 //nextBlock作用:处理数据,展示UI界面! [signal subscribeNext:^(id _Nullable x) { //x:信号发送的内容!! NSLog(@"%@",x); }]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end

四、RACDisposable

 

五、RACSubject

猜你喜欢

转载自www.cnblogs.com/wangchan/p/9047302.html