Objective-Chain, 面向对象的反应框架,由ReactiveCocoa启发

分享于 

10分钟阅读

GitHub

  繁體 雙語
Object-oriented reactive framework, inspired by ReactiveCocoa
  • 源代码名称:Objective-Chain
  • 源代码网址:http://www.github.com/Tricertops/Objective-Chain
  • Objective-Chain源代码文档
  • Objective-Chain源代码下载
  • Git URL:
    git://www.github.com/Tricertops/Objective-Chain.git
    Git Clone代码到本地:
    git clone http://www.github.com/Tricertops/Objective-Chain
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/Tricertops/Objective-Chain
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    目标链 Flattr this

    面向对象的React性框架以为单位,以声明式方式抽象出生产转换和消耗。

    项目灵感来自 ReactiveCocoa,但采用更面向对象的方法。

    目的是构建可以重用和可以扩展的解决方案,为 绑定提供解决方案。 使用目标链实现MVVM实现的文章。

    在生产中可以可靠地使用 。 遵循路线图的进度。

    概念

    一切都发生在一个原因,这是特别的true 软件。 软件的基本原理是接收输入并提供输出。 对带有操作的事件做出React,但我们的操作可以触发新事件。 React性框架应该允许你以声明方式编写规则。 这意味着你有写它一次,它永远工作 ( 或者至少在被取消之前)。

    在iOS和 OS X 应用程序中,我们知道多种对事件作出React的方法: 目标+ 行动,通知 key-value Observing Delegation Delegation Delegation Delegation Delegation Blocks Blocks Blocks Blocks Blocks。 所有这些都有不同的特征,因此在不同的情况下使用,并使用不同的api。 目标链尝试收费这些回调机制的统一,让你轻松接收事件,筛选或者转换它们的值,然后执行操作或者将它们与其他事件关联。

    事件 vs-值

    为了避免混淆,我们应该明确事件和值之间的区别。 差额,目的链的目的是。 生成一个值是一个事件和事件通常具有一些与它们关联的值。 如果没有,的值仍然是一个值。

    主要组件

    核心概念非常简单: Producers send发送价值和消费者 收到他们。 基于xml的生产者和消费者是抽象术语,因此 true 功能是通过它们的具体实现。

    厂商

    • 计时器 定期发送时间间隔给消费者直到停止。

    • 属性 - 观察给定对象和关键路径的KVO通知,并将最新的值发送给的消费者。 它是的核心。

    • Notificator Observes Observes Observes Observes,并将它们发送给消费者

    • 目标 目标动作回调Receiver发送发送方给消费者

    • 命令 - 通用生成器通过调用它的方法来手动使用。

    • Hub Hub - 特殊的生产商,它接受多个其他厂商的,并将他们的价值提升到 forwards。 目前有三种类型的: 合并,合并和依赖。更多关于后面的内容。

    • 此外,你还可以轻松地使用自定义实现来创建生成器。 如果应该实现其他事件/值的源,那么可以自由地向建议它。

    消费者

    • 这是 Property Property - Yes Producer是上面的生产者,但是这次它设置了使用KVC的接收值。 设置通常触发KVO事件,即立即生成。 它是的核心。

    • 调用 调用常规调用,并根据接收值替换参数。 不用担心,创建和使用 NSInvocations 从来就不容易 ! 它是的核心。

    • 这是用户 最通用的用户,可以使用块定制。 允许你轻松创建消费者的ad实现,如果没有更好的替代( 相信我通常情况下)。

    • switch 类似于 switch 或者 if-else 控制语句,switch 采用多个消费者使用一个谓词每个 Predicate Predicate。 一旦接收到值,它将调用所有谓词计算为 YES的子。

    • 此外,还提供了一些的消费者,但他们通常只使用订阅者来执行他们的任务。 如果存在其他特殊情况,需要自定义子类,则建议它们。

    这些仅仅是链的终结,现在有趣的开始。

    介质

    中介只是一个消费者,可以在values和changes之间 stand。 它从不产生新值,也不会以有意义的方式使用它们。

    • - 基本的中介器,将所有值进一步传递给。 当你想在对象接口中公开一个基于xml的生产者插件时,最好是。 Optionally,Bridge Bridge可以使用值转换器在将值传递给用户转换值 before。 这是的核心特性之一。 更多关于变压器。
    • 计算值为的筛选器Mediator Mediator。 计算为 YES的那些会被传递给不更改,否则它们被忽略了( 丢弃)。
    • 的上下文 有趣和灵活的中介,这仅仅是把值转发给。 关键是,它将它们发送到一个已知的上下文。 例如在动画块内部或者 @synchronized 语句内部,或者甚至将它们发送到另一个队列。 上下文对象非常简单,但是允许你做强大的事情。 更多关于队列。
    • 节流 - 时间感知 Mediator。 例如在键盘上输入速度快的情况下,可以在 0.3秒暂停后配置最新输入的文本,这样就可以将值转发到。

    创建链

    你可以使用提供的组件之一,或者创建自己的组件,并将它们结合起来构建应用程序的逻辑。 例如:

    通知并调用选择器:

    [[OCANotificator notify:NSUserDefaultsDidChangeNotification]
     connectTo:OCAInvocation(self, reloadPreferences)];
    • +notify: - 创建一个基于的生成程序,该生成器为给定的通知对进行收费。
    • OCAInvocation - 为 [self reloadPreferences] 调用创建 NSInvocation的宏。
    • 使用给定的调用,在内部创建一个基于xml的消费者,并将它的附加到 Notificator。 调用的目标为。

    用户更改的时间 ,将它的显示在标签中:

    [OCAProperty(self, user.name, NSString)
     connectTo:OCAProperty(self, label.text, NSString)];
    • OCAProperty - 用于创建 OCAProperty 对象的。 它采用目标关键路径和类值。 属性对象可以同时为 Producer和消费者。 这里宏使用 Xcode 自动补全,并在生成时进行验证。
    • -connectTo: - 将参数添加到用户的接收方列表中。 user.name 中的任何更改都将由 label.text 反映。

    如果文本字段文本不更改秒钟,则开始搜索:

    [[[self.textField producerForText]
     throttle:0.3]
     connectTo:OCAInvocation(self, startSearchWithText: OCAPH(NSString) )];
    • -producerForText 创建 OCATarget 生成器为文本字段( 接收器) 配置。 每次更改时发送输入的文本。
    • 在内部创建 OCAThrottle 中介 with给延迟,并将它的附加到接收器并返回。 在 0.3秒之后,只有在没有更改( 未收到任何消息)的情况下,才会发送输入的文本。
    • ( -invoke:OCAInvocation 在上面的第一个示例中描述
    • OCAPH - 为 OCAPlaceholder 提供一个简短的别名的宏。 当作为调用参数传递给 OCAInvoker 时,它将按实际值 替换。 这种情况下,我们只使用了 Placeholer,因此从文本字段接收的文本将传递给调用。 宏的参数用于验证

    示例项目

    有关更多代码示例,请参见包含的链示例。 你可以将它作为一个沙箱来实验目标链,甚至提交拉请求,因这里你的实验将合并到主 repo。

    附加功能

    要稍后进行描述:

    • 类验证。
    • 变压器。
    • 谓词。
    • 队列。
    • 值装箱/取消装箱。
    • 调用收集器。
    • 分解分解。

    遵循路线图的进度。

    看看,装,装,用
    查看,编码,快速- 合并它。

    Chain,branch,fork,
    switch,发送它,发送- 转换它。

    抓住它,改变它,召唤它,调整它
    拖放它,装箱。

    在MIT许可下许可( MIT )
    版权所有 © 2014 -2015马丁 Kiss


    相关文章