• 一 、集成 在Podfile文件中加入 pod 'ReactiveCocoa', '~> 7.2.0',会自动集成ReactiveCocoa,ReactiveSwift,Result三个库,导入头文件就可以使用了。   ... accountTextField.reactive....

     

    一 、集成

    Podfile文件中加入 pod 'ReactiveCocoa', '~> 7.2.0',会自动集成ReactiveCocoa,ReactiveSwift,Result三个库,导入头文件就可以使用了。

     

    、基本用法

     

    2.1  用户交互

     

           // 监听文本框输入内容
            accountTextField.reactive.continuousTextValues.observeValues { (text) in
                
                print("account\(text ?? "")")
            }
            // 监听按钮的点击事件
            loginBtn.reactive.controlEvents(.touchUpInside).observeValues { (button) in
                print("loginBtnClick")
            }

     

    2.2  过滤

     

     // 当文本的内容长度大于3的时候,才想监听文本的内容
            passwordTextField.reactive.continuousTextValues.filter { (text) -> Bool in
                
                return text!.count > 3
                
                }.observeValues { (text) in
                    
                    print("accountfilter\(text ?? "")")
                    
            }

     

    2.3    转换

     

    // text的值映射成text的字符数
            textField.reactive.continuousTextValues.map { (text) -> Int in
                return (text?.characters.count)!
                }.filter { (length) -> Bool in
                    return length > 5
                }.observe { (length) in
                    print(length)
            }

     

     

     

    2.4  冷信号

     func getChatArray() -> SignalProducer<Any, NoError> {
            
            return SignalProducer<Any, NoError>.init { (observer, _) in
                
                self.request.GET(url: Host, paras: nil, success: { (request, response) in
                    
                    if let response = response {
                        self.dataArray = self.WebArray()
                        observer.send(value: response)
                        observer.sendCompleted()
                    }
                    
                }, failure: { (request, error) in
                    
                    observer.sendCompleted()
                })
                
            }
        }
    
    // 创建信号,执行
    loadDataAction = Action.init(execute: getChatArray)
            loadDataAction?.apply().start()
    
    // observer 监听
     viewModel.loadDataAction?.events.observe({ (event) in
                
                print(event)
            })

     

    2.5  热信号

     

           // 热信号
            let (signalA, observerA) = Signal<String, NoError>.pipe()
            let (signalB, observerB) = Signal<String, NoError>.pipe()
            // 联合信号
            Signal.combineLatest(signalA, signalB).observeValues { (value) in
                print( "收到的值\(value.0) + \(value.1)")
            }
            observerA.send(value: "1")
            //注意:如果加这个就是,发了一次信号就不能再发了
            observerA.sendCompleted()
            observerB.send(value: "2")
            observerB.sendCompleted()

     

     

    、总结

     

     

     

    知识点:区别冷信号和热信号

    Swift中,SignalProducer 对应 RACSignal 为冷信号, Signal 对应的 RACSubject 为热信号

    1.冷信号模式,是被动的,需要有人订阅才开启热信号,热信号是主动的,就算没有订阅者也会即刻推送

    热信号可以有多个订阅者,一对多;冷信号只能一对一,当有新的订阅者,信号是重新完整发送的

    形象的说:热信号像是直播,冷信号像是点播

    2..冷信号个人用来进行网络请求,热信号进行类似代理或者通知的数据传递模式,这样就可以简单的理解为,RAC其实就是把apple的一套 delegate,Notification,KVO等一系列方法综合起来了,用起来更舒服罢了。

     

     

    展开全文
  • RAC的好处是响应式编程, 不需要自己去设置代理委托, target, 而是主要以信息流(signal), block为主, 看到这里激动吧, 它可以帮你监听你的事件, 并通过回调(callback)的形式, 实时更新UI, 其实就是把action, 观察者...
  • 时间不是很充足, 先少说点, RAC的好处是响应式编程, 不需要自己去设置代理委托, target, 而是主要以信息流(signal), block为主, 看到这里激动吧, 它可以帮你监听你的事件, 并通过回调(callback)的形式, 实时更新UI。...
  • 之前已经写过两篇关于ReactiveCocoa(以下简称RAC)的文章了,但主要也是在阐述基本的概念和使用,这篇文章将会从实战的角度来看看RAC到底解决了哪些问题,带来了哪些方便,以及遇到的一些坑。   概述   为...
  • 使用三方SDWebImage, 使用sd_setImageWithUrl,设置占位图片,当TableViewCell上的图片没有刷新出来的时候,保证其位置不会被占用。 eg. [cell.titltImageView sd_setImageWithURL:[NSURL URLWithString:car....
  •  * RAC有许多强大而方便的宏。   */    - (void)viewDidLoad {   [super viewDidLoad];   // Do any additional setup after loading the view, typically from a nib.   [self ...
  • 什么是RAC? 几乎每一篇介绍RAC的文章开头都是这么一个问题。我这篇文章是写给新手(包括我自己)看的,所以这个问题更是无法忽视。 简单的说,RAC就是一个第三方库,他可以大大简化你的代码过程。 官方的说,...
  • RAC的坑 http://www.cocoachina.com/industry/20140609/8737.html 1.对数组的观察 有了这些Category,大部分的Delegate都可以使用RAC来做。或许你会想,可不可以subscribe NSMutableArray.rac_sequence....
  • RAC(一) 2016-11-28 14:06:58
    什么是RAC? 几乎每一篇介绍RAC的文章开头都是这么一个问题。我这篇文章是写给新手(包括我自己)看的,所以这个问题更是无法忽视。 简单的说,RAC就是一个第三方库,他可以大大简化你的代码过程。 官方的说,...
  • 注意事项 1 数组不能放在UIViewController里面,在zhe'li'mi
  • KVO在tableView中的使用 2018-08-30 11:09:26
    第一次在这里写东西,以前都是在在代码中进行备注,或者写个备忘录。找起来太麻烦,就转战这里。慢慢丰富内容!文字功底太差也是一个原因!!! ... ...不提其他,仅仅看看tableView中,因为tableViewCell的重用机制,...
  • 什么是RAC? 几乎每一篇介绍RAC的文章开头都是这么一个问题。我这篇文章是写给新手(包括我自己)看的,所以这个问题更是无法忽视。 简单的说,RAC就是一个第三方库,他可以大大简化你的代码过程。 官方的说,...
  • RAC小记-RAC用法总结 2016-04-18 22:07:07
    什么是RAC? ...几乎每一篇介绍RAC的文章开头都是这么一个问题。我这篇文章是写给新手(包括我自己)看的,所以这个问题更是...官方的说,ReactiveCocoa(其简称为RAC)是由GitHub开源的一个应用于iOS和OS X开发的
  • RAC用法初学 2016-09-19 10:43:09
    什么是RAC? 几乎每一篇介绍RAC的文章开头都是这么一个问题。我这篇文章是写给新手(包括我自己)看的,所以这个问题更是无法忽视。 简单的说,RAC就是一个第三方库,他可以大大简化你的代码过程。 官方的...
  • RAC 响应式编程 2017-10-18 17:29:42
    KVO 通知 时钟 网络异步回调3、目的: 接管事件的监听4、注意(坑): (1)RAC最大的坑是循环引用 (2)多人开发中,确保所有人的代码风格一致 (3)个人开发,要注意版本对应的语言: 2.5以下全都是OC, ...
1 2 3 4 5 ... 20
收藏数 555
精华内容 222