Facebook 昨天发布了他们的 iOS UI 开发工具 - ComponentKit,这是一个受 React 启发而产生的 iOS 视图框架,最开始用于 Facebook 的 News Feed,如今已经开始做为整个 Facebook 的 iOS 开发工具。今天我把他们官方的介绍博客翻译一下,你们互相交流。如下是博客原文全译。html
在 iOS 上面开发界面,须要建立视图、配置界面、视图分层等等不少步骤,也就不可避免的须要书写 N 多的代码。这还仅仅是界面设计,除此以外,完成 controllers 的回调、控制内部事务在界面上的显示效果、界面的操控和内部事务的联系等等多方面的事情都须要手动解决。即使是界面很简单的 App,若是存在这种复杂的双向数据流的关系,那么代码也会变得很复杂很容易出错。Qt 的信号、槽和 iOS 的 Target-Action 机制其实也是很容易实现这种双向数据流的关系,可是没有办法解决界面和事务之间的联系,也有不少其余的问题:性能、测试等。react
这些问题曾经困扰了咱们多年。News Feed 是有着复杂的列表样式外观的 iOS 软件,由许多的 Row Type 组成,每个 Row 都有各类各样不一样的很烦的界面样式和交互方式,这个就很坑了。每次维护这个东西都像是在清理厕所,尤为是它的功能还在不断增长,它的代码在不断变多,版本迭代速度快到你都没办法直到天天都到底增添了什么新代码,上司还要拿着报告说“你这个软件太慢了,影响用户体验,给你三个小时把这个 App 的速度提升 80%”。ios
为了解决这一挑战性的问题,咱们从本身的 ReactJS 获得启发,把不少具体的东西抽象出来,作出一个功能性的、响应式编程模型的 iOS 原生 UI 框架 ComponentKit,目前 News Feed 在应用这个框架。git
如今 ComponentKit 将基于 BSD 协议对外开源。程序员
ComponentKit 使用功能性和声明性(declarative)的方法来进行建立界面,和以往不一样的是,ComponentKit 使用单向数据流的形式从 不可变的模型 映射到不可变的组件来肯定视图的显示方式。ComponentKit 的 declarative 看上去和 declarative UI(QML) 差很少,其实差得远。QML 更偏向于 UI 设计的描述性,而 ComponentKit 则是作好基本 UI 和事件之间的联系,让事件设计和 UI 设计能够分开单独完成。github
内在决定外在,组件的功能和内部的层次决定了用户界面该如何规划,界面的规划决定了 UI Kit 的元素层次结构的设计。编程
传统作法的结果是大部分时间都被浪费在 UI 该如何实现,ComponentKit 却可让你把时间都用在在 UI 该怎么设计上面。框架
例如,传统的 iOS 开发中,为了开发一个带有 header、text 和 footer 的视图,须要如下步骤:模块化
可是 ComponentKit 不同,ComponentKit 是一种描述性的开发包:你只须要提供你但愿获得什么便能获得什么,而不和传统的 iOS 开发同样,再去一个一个地建立视图、修改视图样式、添加视图、添加约束条件。如图所示,想要获得这个布局,只须要使用描述性的语言描述“我想要一个 header 组件,一个 text 组件,一个 footer 组件,他们的宽度相同,从上到下排列在一块儿”。单单从这点来看,和 QML 相比,ComponentKit 更相似于 Bootstrap:提供已经完成的组件,你只须要决定组件如何摆放,即可轻松地开发出 UI 界面。工具
ComponentKit 已经彻底把如何渲染 UI 的事情抽象出来,程序员彻底能够不去考虑具体是如何实现渲染的,也不用去考虑界面渲染该如何优化。ComponentKit 使用后台线程进行界面布局,也实现了智能组件重用,你彻底能够不去考虑界面致使的内存泄露问题。ComponentKit 不只仅能够极大地提升开发效率,界面响应速度和软件的运行效率也会有极大地提高。
若是你想深刻了解 ComponentKit,你能够 参考 Adam Ernst 的这篇文章,也能够去看一下 Ari Grant 的视频的后半部分。
ComponentKit 极大地提高了 News Feed 的 UI 响应速度和稳定性,也让整个软件的内部编码更容易理解。ComponentKit 达到了以下的目标:
引入了 ComponentKit 以后,咱们可以维护更少的代码,有更少的 bug 须要修复,有更大的测试覆盖率:咱们如今能够有更多的时间作羞羞的事情了
ComponentKit 已经在生产环境的 News Feed 上用了六个月,咱们以为能够一直用下去。如今将 ComponentKit 开源,让整个 iOS 开发者社区的人都有 Facebook 的生产效率,也都能和 Facebook 同样作出高性能的 App。很但愿你也能在你的开发环境中使用 ComponentKit,而后给咱们反馈。
咱们从新定义了如何在 iOS 上开发界面,但愿你也能用 ComponentKit 开发出更优雅的 App。
-(译文完)-
ComponentKit 已经在 CocoaPods 中可用了,只须要在 Podfile 添加以下代码便可:
pod 'ComponentKit', '~> 0.9'
ComponentKit Demo:
pod try ComponentKit
原文:Introducing ComponentKit: Functional and declarative UI on iOS