ReactiveCocoa 初识

作者: 漂泊海上的大土豆 | 来源:发表于2017-04-01 17:51 被阅读84次

简单介绍:

ReactiveCocoa 是近年来比较黑科技的开源框架,但是学习路线比较陡峭,现在已经更新到5.0并已全面支持 Swift 语言,针对 objc 的部分已经独立分离出来,停留在了 pod 'ReactiveObjC','~> 2.1.2' 本次学习针对的是 objc 的部分。


Functional Reactive Programming

学习 ReactiveCocoa 就要提到下面这种编程思想 Functional Reactive Programming 函数式 响应式 编程思想。

例如:

a = 1
b = 2
c = a + b = 3

b = 3
// now what is the value of c?

我们期望在 b 的值变化后 c 的值也会随之变化,所以叫做响应式编程。在 iOS 中运用 KVC. KVO. NSNotification. Delegate 等也可以做到这样的事情,但往往不够直观也比较麻烦。

而 RAC 统一了对 KVO、UI Event、Network request、Async work 的处理,因为它们本质上都是值的变化(Values over time)。


ReactiveCocoa

ReactiveCocoa 整体围绕着 RACSignal 展开,也是它的核心,它其实是一个事件源,RACSignal 会给它的订阅者(subscribers)发送一连串的事件。有三种事件:nexterrorcompletedSignal 可以在 errorcompleted 事件发出前发出任意多的 next 事件。RACCommand RACObserve RACSubject 都是其中比较重要的类。

图片来自 Limboy 的技术博客,链接在本文底部

几个简单的小🌰

  • RACObserve 实现了对属性的绑定,返回一个 RACSignal响应属性的变化。

// When self.username changes, logs the new name to the console.
//
// RACObserve(self, username) creates a new RACSignal that sends the current
// value of self.username, then the new value whenever it changes.
// -subscribeNext: will execute the block whenever the signal sends a value.
[RACObserve(self, username) subscribeNext:^(NSString *newName) {
   NSLog(@"%@", newName);
}];

// 只有当名字以'j'开头,才会被记录
[[RACObserve(self, username)
    filter:^(NSString *newName) {// 过滤语法
        return [newName hasPrefix:@"j"];
    }]
    subscribeNext:^(NSString *newName) {
        NSLog(@"%@", newName);
    }];
  • RACCommand 已经被附加在很多基础控件上边,比如 NSButton ,它会把自身作为信号返回。

// Logs a message whenever the button is pressed.
//
// RACCommand creates signals to represent UI actions. Each signal can
// represent a button press, for example, and have additional work associated
// with it.
//
// -rac_command is an addition to NSButton. The button will send itself on that
// command whenever it's pressed.
self.button.rac_command = [[RACCommand alloc] initWithSignalBlock:^(id _) {
    NSLog(@"button was pressed!");
    return [RACSignal empty];
}];
  • RAC 还提供了超级强大的宏定义,比如让 UILable 响应 UITextView 的变化只需要这样一句话。

RAC(self.outputLabel, text) = self.inputTextField.rac_textSignal;

参考资料:

相关文章

  • 初识ReactiveCocoa

    今天主要分享内容: ReactiveCocoa简单介绍 响应式编程和函数编程的概述 RACSignal 信号 RA...

  • 初识ReactiveCocoa

    原文 : 与佳期的个人博客(gonghonglou.com) ReactiveCocoa 是一个Objective...

  • ReactiveCocoa 初识

    简单介绍: ReactiveCocoa 是近年来比较黑科技的开源框架,但是学习路线比较陡峭,现在已经更新到5.0并...

  • ReactiveCocoa 初识(一)

        入职有一段时间了,没有开发任务,白天就看看博客写写自己的东西,晚上看世界杯,简直不要太爽,就是天台有点挤了...

  • ReactiveCocoa初识篇

    关于ReactiveCocoa ReactiveCocoa是iOS环境下的一个函数式响应式编程框架。函数式响应式编...

  • ReactiveCocoa--初识RAC

    RAC是什么?RAC — ReactiveCocoa(RAC) Github 一个开源框架!!RAC — 函数响...

  • 探究ReactiveCocoa 底层KVO封装流程

    一、对比原生KVO,初识ReactiveCocoa的KVO 我们先来看一段代码,通过触屏来动态修改视图背景色 从上...

  • iOS-ReactiveCocoa使用之RACCommand

    前言 前几天开始研究Cocoa的第三方编程框架ReactiveCocoa,其使用响应式、函数式的编程思想,对于初识...

  • 初识ReactiveCocoa(一) —— OC项目集成

    先简单介绍下ReactiveCocoa ReactiveCocoa(简称RAC)是Github上一套作用于iOS应...

  • RAC自己练习下

    ReactiveCocoa使用个人总结 ReactiveCocoa简介 ReactiveCocoa(简称RAC)是...

网友评论

    本文标题:ReactiveCocoa 初识

    本文链接:https://www.haomeiwen.com/subject/svtwottx.html