NZTrampoline 0.1.3

NZTrampoline 0.1.3

H. Vakilian 维护。



  • 作者:
  • Hamidreza Vakilian

NZTrampoline

CI Status Version License Platform

摘要

允许您将多个对象声明为代理。

简介

对象代理的基本模式如下所示: Basic paradigm for object delegation

如果我们要有多个代理呢?NZTrampoline 允许您在支持链式操作的同时声明多个代理: How NZTrampoline allows you to declare multiple delegates

用例

假设我们想要开发 MyMagicScrollView,它是 UIScrollView 的一个子类,在用户与其交互时执行一些计算(例如拖动)。我们希望将 MyMagicScrollView 发布为一个独立的模块,并供其他开发者使用,所以它有点像是一个黑盒。

在 MyMagicScrollView 的实现中,我们将它的代理设置为 NZTrampoline 的一个对象。这个弹性床允许实现代理方法,并将它们都转发给另一个对象。 MyMagicScrollView 和它自己的弹跳代理,能够将所有代理方法转发给最终代理。

如何使用

首先,创建一个类来继承 NZTrampoline 以及期望的代理的泛型协议,比如 MyTrampoline

  1. 让 MyTrampoline 类遵守你用来继承 NZTrampoline 的相同协议
  2. 实现任何必要的代理方法,你可能需要做一些额外的开发来通过 Observables、Closures 等将方法执行报告给另一个对象。

注意 NZTrampoline 不会转发已实现的代理方法。你需要负责将拦截到的代理方法转发给代理对象。请参考下面的示例代码。

class MyTrampoline: NZTrampoline<UICollectionViewDelegate>, UICollectionViewDelegate {
 
    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        if delegate != nil && delegate!.responds(to: #selector(scrollViewDidEndDecelerating(_:))) {
            delegate!.scrollViewDidEndDecelerating?(scrollView)
        }
 
        print("MyTrampoline received scrollViewDidEndDecelerating")
    }
     
    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        if delegate != nil && delegate!.responds(to: #selector(scrollViewWillBeginDragging(_:))) {
            delegate!.scrollViewWillBeginDragging?(scrollView)
        }
 
        print("MyTrampoline received scrollViewWillBeginDragging")
    }
}

示例

要运行示例项目,首先克隆仓库,然后从 Example 目录运行pod install

需求

安装

NZTrampoline 通过 CocoaPods 提供分发。要安装它,只需将以下行添加到你的 Podfile 中

pod 'NZTrampoline'

作者

Hamidreza Vakilian, [email protected]

许可

NZTrampoline可在MIT许可下使用。有关更多信息,请参阅LICENSE文件。