活性可可介绍

ReactiveCocoa是一个框架,允许您实施反应性功能编程。 响应式功能编程是一种编码方法,可确保应用程序某一部分的更改自动反映在整个应用程序中。

因此,让我们假设您具有三个属性A,B和C,并且A = B +C。如果B或C发生变化,那么A也会做出反应并且也会发生变化。 用ReactiveCocoa来解释,功能性反应式编程的基本概念是我们告诉代码做什么而不告诉它如何做。

核心组成

  1. 信号会随时间发送值,直到它完成或出错为止。 将每个变量包装在MutableProperty中,可以确保每个变量都有其自己的信号,该信号在值更改时将触发,而不是为模型中的每个变量提供信号和观察者。

ReactiveCocoa具有某些内置功能,可让您转换信号。

在上面的示例中,我正在转换来自初始输入的信号,并使用map函数将信号值的每个字母大写。 映射运算符使用新的映射值生成一个新信号。

也可以订阅信号以产生副作用。 在下面的示例中,按下了SubmitButton并发送了一个信号。 在这种情况下,信号的副作用是通过将用户的用户名值发送到两个位置来设置两个标签:dressViewController的标题和收藏夹视图中的标签。

2. 观察者代表观察信号的物体。 创建信号时将创建观察者对象。 信号具有与它们关联的某些事件类型,您可以在观察信号时调用它们:

  • 值:返回与信号关联的实际值
  • 失败:携带Erro​​rType并在发送时导致信号停止
  • 已完成:导致信号停止,但不发送错误事件
  • 中断:自动发生并停止信号

每次在信号上建立观察时,都会创建一个Disposable对象。 在此对象上使用dispose方法可删除该特定观察值。 如果没有其他可观察的信号,则该信号会随着中断事件而停止。

3. 信号产生器创建的信号可以产生Value类型的值和/或因Error类型的错误而失败。 当事件具有特定的开始和结束时,信号产生很有用。 具体来说,信号产生器推迟事件的执行,直到调用start()为止。 例如,信号产生器在发出网络请求时是适用的,因为它有一个设定的开始和一个设定的结束。 您不想持续拨打网络电话。

4. 绑定允许您说“每当此变量更新时,请确保此属性更新为其值。”此代码非常简单。 在信号中,您输入“ <〜”以表示它正在绑定。

使用此绑定信号更新的标签不是UILabel类型,而是BindableLabel类型。 从下面的代码中可以看到,BindableLabel的行为与UILabel完全相同,因为您可以使用格式化UILabel的相同方式对其进行格式化。 一个区别是,一旦信号值更改,文本将立即更新。

查看ReactiveCocoa的github,以获取有关通过此出色框架可使用的所有强大功能的更多详细信息。

一如既往,快乐的编码!! 🙂