OC+RAC(六) 核心方法bind

-(void)_test6{
    RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        [subscriber sendNext:@"first value"];
        [subscriber sendNext:@"second value"];
        [subscriber sendNext:@"third value"];
        [subscriber sendCompleted];
        return nil;
    }];

    RACSignal *bindSignal = [signal bind:^RACSignalBindBlock{

        return  ^RACSignal *(id value, BOOL *stop) {

            NSString *oValue = value;
            if ([oValue isEqualToString:@"first value"]) {
                return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
                    [subscriber sendNext:@"first value bind after"];
                    [subscriber sendCompleted];
                    return nil;
                }];
            }

            if ([oValue isEqualToString:@"second value"]) {
                *stop = YES;
                return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
                    [subscriber sendNext:@"second value bind after"];
                    [subscriber sendCompleted];
                    return nil;
                }];
            }

            if ([oValue isEqualToString:@"third value"]) {
                return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
                    [subscriber sendNext:@"third value bind after"];
                    [subscriber sendCompleted];
                    return nil;
                }];
            }

            return nil;
        };
    }];

    [bindSignal subscribeNext:^(id  _Nullable x) {

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

}
再来一个例子:

-(void)_test7{
    //1.创建信号
    RACSubject * subject = [RACSubject subject];

    //2.绑定信号
    RACSignal * bindSignal = [subject bind:^RACSignalBindBlock _Nonnull{

        return ^RACSignal * (id value, BOOL *stop){
            NSLog(@"%@",value);
            return [RACReturnSignal return:[NSString stringWithFormat:@"一顿操作猛如虎 %@",value]];

        };
    }];

    //3.订阅信号
    [bindSignal subscribeNext:^(id  _Nullable x) {
        NSLog(@"绑定接收到!! %@",x);
    }];

    //4.发送
    [subject sendNext:@"发送原始的数据"];
}

原文地址:https://www.cnblogs.com/liuw-flexi/p/10805828.html

时间: 2024-10-04 08:59:58

OC+RAC(六) 核心方法bind的相关文章

SSH框架之Struts(3)——Struts的执行流程之核心方法

上篇讲了Tomcat实例化一个单例的ActionServlet.依据web.xml配置文件做好对应的初始化工作. 这时client产生一个.do结尾的request请求,採用get/post方式提交之后.不论哪种方式提交,都会进入到process核心方法中. ActionServelt doGet()和doPost()方法 public void <strong>doGet</strong>(HttpServletRequest request, HttpServletRespon

【zepto学习笔记01】核心方法$()(补)

前言 在很久之前,我们项目有一个动画功能,功能本身很简单,便是典型的右进左出,并且带动画功能 以当时来说,虽然很简单,但是受限于框架本身的难度,就直接使用了CSS3的方式完成了功能 当时主要使用transform与animation实现功能,并且用了一个settimeout执行回调,然后此事便不了了之了 但是出来混总是要还的,这不,最近相似的东西又提了出来,我们当然可以将原来的那套东西拿来用,但是看着那个settimeout总是不是滋味,因为这样捕捉回调的效果以及可能引起的BUG大家都懂,于是就

RAC(ReactiveCocoa)使用方法(二)

RAC(ReactiveCocoa)使用方法(一) RAC(ReactiveCocoa)使用方法(二) 上篇文章:RAC(ReactiveCocoa)使用方法(一) 中主要介绍了一些RAC中常见类的用法,这篇文章主要总结日常开发中结合一些UI控件的用法. RAC给常见的很多UI类拓展了用法,使得开发变得越来越简单,减少了很多不必要的代理和Target代码,RAC内部已经处理好了这些事件. --- 网络请求 贴上核心代码,具体代码见Github; // // ViewModel.m // // /

VS2012中使用CEGUI项目发布到XP平台的问题(核心方法就一句话。“你项目使用的所有外部依赖库都用/MT编译。”)

接着上一篇文章,详细说说如何把一个带CEGUI的项目发布到XP平台. 这个问题纠缠了我好几天.这里把详细解决思路记下来.有同样问题的朋友可以少走很多弯路. 核心方法就一句话.“你项目使用的所有外部依赖库都用/MT编译.” 1.准备. 首先你要具备如下工具:CEGUI源码:FreeType源码:Pcre源码:CMake工具.我会在下文说明原因. 各个开源库的版本号,请参考你的CEGUI引用的各自的头文件分别下载. FreeType开源库主页:http://sourceforge.net/proje

jQuery编程中的一些核心方法简介

调用 jQuery 对象的方法很简单: $('h1').remove(); 大多数 jQuery 方法都是像上面这样被调用的,这些方法都位于 $.fn 命名空间内,这些方法称为 jQuery 对象方法. 但是也有一些方法不需要依赖于选择器的结果集,这些方法位于 jQuery 命名空间内,这些方法称为 jQuery 核心方法.如果觉得不好理解,记住下面两条即可: 所有 jQuery 选择器的方法都位于 $.fn 命名空间内. $ 内的方法一般都是一些实用的功能性方法,这些方法不依赖选择器,这些方法

OC中的内省方法初探

内省(Introspection)是对象揭示自己作为一个运行时对象的详细信息的一种能力.NSObject协议和类定义了很多内省方法,用于查询运行时信息,以便根据对象的特征进行识别. 在iOS开发过程中,有效的使用内省方法.有助于避免错误地进行消息派发.错误地假设对象相等.以及类似的问题.明智地使用内省可以使面向对象的程序更加高效和强壮. OC中的内省方法有: 1,isKindOfClass:检查本实例对象,是否是某个类的对象,包括继承的子类. 2,isMemberOfClass:检查本实例对象,

OC实例变量初始化方法

OC实例变量初始化方法1. 使用实例setter方法 默认初始化方法 + setName:xxx setAge:xxx2. 使用实例功能类方法,默认初始化方法 + setName:xxx age:xxx3.使用实例初始化方法 initWith开头的方法4.使用构造器 类名+With…以Person  Student两个类为例1. 使用实例 setter方法这是最麻烦的方法 @interface Person : NSObject { NSString *_name; NSString *_sex

Perl入门(六) Perl方法的使用

 1.定义一个方法 Perl使用sub定义方法. 语法: sub 方法名称{方法体} 2.调用一个方法 Perl直接使用方法名称调用方法. 调用方式有以下四种: 方法名称: &方法名称: 方法名称(); &方法名称(); 说明:方法调用可以再任何位置,可以在方法前.后调用,也可以在方法体内部调用. 3.传递参数 Perl通过方法名后面的括号将参数列表传递到方法体内.例如:function_name("param1","param2"...); 方

Hibernate4之session核心方法

在学习session的核心方法之前,我们先了解下hibernate中几种对象的状态: 暂时状态:这样的状态就好像咱们公司请的暂时员工一样,他在公司里没有相关的资料和id. 特点:在使用代理主键的情况下, OID 通常为 null 不处于 Session 的缓存中 在数据库中没有相应的记录 持久化状态:我们能够理解成我们公司的正式在岗职工. 特点:OID 不为 null 位于 Session 缓存中 若在数据库中已经有和其相应的记录, 持久化对象和数据库中的相关记录相应 Session 在 flu