RAC 5.0 相比于 4.0 有了巨大的变化,不仅是受 swift 3.0 大升级的影响,RAC 对自身项目结构的也进行了大幅度的调整。这个调整就是将 RAC 拆分为四个库:ReactiveCocoa、ReactiveSwift、ReactiveObjC、ReactiveObjCBridge。

ReactiveCocoa

现在的 RAC 注意力主要集中在 Swift 和 UI 层上,将原来一个基于 RAC 面向 UI 层的扩展库 Rex 合并进了 RAC 。

RAC 3 和 4 的主要精力在围绕 Swift 重新打造一个响应式编程库。因为这部分的核心 API 已经很成熟,所以现在将重心放在为 AppKit 和 UIKit 提供一些更好用的扩展上。

ReactiveSwift

原来 RAC 中只和 Swift 平台相关的核心代码被单独抽取成了一个新框架:ReactiveSwift 。

Swift 正在快速成长并且成长为一个跨平台的语言。把只和 Swift 相关的代码抽取出来后,ReactiveSwift 就可以在其他平台上被使用,而不只是局限在 CocoaTouch 和 Cocoa 中。

ReactiveObjC

在 RAC 3 和 4 中,RAC 也包含了 RAC 2 中的 OC 代码。现在这部分代码被移到了 ReactiveObjC 。

这样做的原因是因为两个库虽然有着一样的核心编程范式,实际上却是完全独立的两套 API 。实际的使用中,RAC 4 和 RAC 2 是完全不同的两组用户群,并且维护的团队其实也是两组。之前混在一个库里也增加了管理的复杂度。拆分出去后也可以更加自由的维护 ReactiveObjC 。

ReactiveObjCBridge

在把 Swift 和 OC 的库拆分之后问题来了,并不是所有的库都是纯 OC 和 Swift 的。有相当大一部分项目处于 OC 迁移到 Swift 过程中,其中可能使用 Swift 调用了 RAC 2 中基于 OC 写的 API。为了解决这部分用户的问题,所以有了ReactiveObjCBridge 。

在项目里现在到底要引入哪些

如果你只是纯 swift 项目,你继续使用 ReactiveCocoa 。但是 RAC 依赖于 ReactiveSwift ,等于你引入了两个库。

如果你的项目是纯 OC 项目,你需要使用的是 ReactiveObjC 。这个库里面包含原来 RAC 2 的全部代码。

如果你的项目是 swift 和 OC 混编,你需要同时引用 ReactiveCocoa 和 ReactiveObjCBridge 。但是 ReactiveObjCBridge 依赖于 ReactiveObjC ,所以你就等于引入了 4 个库。

API 重新命名????

这部分的给我的感觉就是会呼吸的痛。很多 API 需要重新找一遍,而且命名也变了。

一个方向是参照 RxSwift 采用了reactive 的命名空间。比如:

1
2
3
let appearing = view.reactive.trigger(for: #selector(viewWillAppear(_:)))
let producer = object.reactive.values(forKeyPath: #keyPath(key))

API 都放在了 reactive 后。不再是原先的 rac_xx 。

还有一部分与 UI 相关的属性命名也改了,可能是受 rex 的影响。比如:

1
2
3
4
// 原来是 rac_text
viewModel.searchString <~ textField.reactive.textValues
button.reactive.pressed = CocoaAction(viewModel.commit)

还增加了生命周期 lifetime 的属性。比如:

1
signal.take(during: object.reactive.lifetime)

当 object 被回收的时候信号也停止获取 value 。

最后

让我们一起笑着活下去????。

欢迎关注我的微博:@没故事的卓同学

相关链接:RAC change log

转载于:https://www.cnblogs.com/Amoyios/p/6087567.html

ReactiveCocoa 5.0 初窥:可能是最痛的一次升级相关推荐

  1. OBJECT_METHOD初窥

    一.  背景:Windows NT 的对象机制 Windows NT系统将各种资源以对象的方式进行组织和管理.虽然Windows NT内核使用C语言和汇编语言编写的,本身并未使用到C++中的面向对象机 ...

  2. 并发编程-01并发初窥

    文章目录 引言 思维导图 基础知识构建 涉及的知识点一览 高并发处理思路与手段一览 并发初窥 概念 并发问题模拟 代码 引言 说来惭愧,一直没有系统的梳理过并发编程的知识,这次借着学习_Jimin_老 ...

  3. java aspectj_初窥AspectJ

    AspectJ可以说是Java中当之无愧的黑魔法.说它是黑魔法,一方面是因为它很强大,能够解决一些传统编程方法论解决不了的问题,而另一方面,它也相当的晦涩,有着比较陡峭的学习曲线. 本文将带大家探索下 ...

  4. 初窥R(基本说明、获取帮助、工作空间、输入输出、包)

    初窥R(基本说明.获取帮助.工作空间.输入输出.包) 本篇简要介绍使用R的一些基本概念,包括基本说明.获取帮助.工作空间.输入输出,每个知识点中都会通过一个例子来练习. 一.R基本情况说明 1.R是一 ...

  5. flutter 返回指定界面_Flutter 即学即用系列博客——04 Flutter UI 初窥

    前面三篇可以算是一个小小的里程碑. 主要是介绍了 Flutter 环境的搭建.如何创建 Flutter 项目以及如何在旧有 Android 项目引入 Flutter. 这一篇我们来学习下 Flutte ...

  6. 【重点】初窥Linux 之 我最常用的20多条命令

    [重点]初窥Linux 之 我最常用的20多条命令 玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我 ...

  7. 初窥Xcode4 -- Xcode4主题样式、快捷键等常用设置

    今天晚上开始使用Xcode4,初窥历程如下. 一.下载安装Xcode4 因为我需要让Xcode4和老版本共存,在安装Xcode4时选择其他安装路径,安装成功后在xcode4安装目录下改名Xcode.a ...

  8. [基础] AHK函数对象初窥 ① _实例2_实际可用版

    [基础] AHK函数对象初窥 ① _实例2_实际可用版 ;# 母文章 https://zhuanlan.zhihu.com/p/48977298;;;;;;;;;;;;;;;;;;;;;;;;;;;; ...

  9. Linux 计算机网络 从 ping 来初窥计算机网络

    Linux 计算机网络 从 ping 来初窥计算机网络 在上一章节<计算机网络从零到一>我们重点讲解了整个网络的形成,以及物理层.数据链路层.网络层这三层的形成以及他们所解决的问题,而本章 ...

  10. [初窥目标检测]——《目标检测学习笔记(2):浅析Selective Search论文——“Selective Search for object recognition”》

    [初窥目标检测]--<目标检测学习笔记(2):浅析Selective Search论文--Selective Search for object recognition> 本文介绍 前文我 ...

最新文章

  1. Linq To select
  2. Oracle 11g 新特性 -- 只读表(read-only table)说明
  3. 定时任务卡死问题排查
  4. java中引用一个文件数据_JAVA-基础-引用数据类型(类)
  5. 新生代农民工必看:模拟器eNSP安装教程(附下载链接)
  6. 计算机网络期末复习提纲
  7. matlab脑肿瘤识别与分割程序_车牌识别算法
  8. 常见数据类型的手机二维码生成与识别格式参考
  9. 【15】淘宝sdk——入门实战之header.php制作(三)
  10. 系统字体服务器,把字体放到服务器
  11. 带你玩转 3D 检测和分割 (二):核心组件分析之坐标系和 Box
  12. clamwin + 拖拽查毒+右键查毒
  13. Problem A. Alarm Clock
  14. 即拼商城系统模式开发
  15. 结构化大数据分析平台设计
  16. 视频文件的ass字幕 文件
  17. Anaconda中conda命令或者pip命令使用豆瓣镜像下载包
  18. CTF pwn题堆入门 -- Unsorted bin
  19. Lintcode -378. 将二叉查找树转换成双链表
  20. Oracle EBS教学视频

热门文章

  1. Netty-5、TCP 粘包/拆包 问题
  2. Java【第六篇】面向对象基础
  3. [转]如何有效地记忆与学习
  4. python format()函数的用法
  5. 经典:浅谈以太坊智能合约的设计模式与升级方法
  6. 定时任务schedule(spring boot )
  7. [20141124]sql server密码过期,通过SSMS修改策略报错
  8. aspxgridview将所选项导出ASPxGridViewExporter1
  9. PHP 中检查是否关联数组(多维数组)的方法 (UPDATE!)
  10. 计算机视觉入门和进阶学习