Responder

Swift Tag

Responder 是一个软件包,它提供了一种通过责任链发送数据的方式,它基于委托模式实现了更好的协议,并提供了一个比通知中心更好的解决方案。

如何使用这个软件包?

非常简单。首先,我们只需实现 Responder 协议,在我们希望创建基于值类型或引用的链表的地方。请看下面的例子。

struct Object: Responder {
    var nextResponder: Responder?
}

alt text

为什么要这样做?

基本上,我们希望通过这个列表发送数据,并且我们需要有人来回答他们是否可以执行此操作。我们如何实现这一点?这个实现背后的思想是将委托模式和通知中心融合起来,使用责任链模式。

alt text

按照这个例子,我们需要遍历每个对象,并检查我们是否可以执行或不执行一个动作。如果不能,那么我们检查链中的下一个元素。

protocol ActionProtocol {
    func send(event: Action)
}

enum Action: Event {
    case here

    func sendToHandler(_ handler: ActionProtocol) {
        handler.send(event: self)
    }
}

在这种情况下,ActionProtocol 仅用作验证协议,当在链中找到时将被执行。 Event 是我们需要实现并通过链发送的协议,非常容易,对吧!

我们如何发送一个事件?

别担心,这比你想象的要简单得多!

object.tryToHandle(Action.here)

看到了吗?很简单

使用场景

协调器模式

我们可以使用它来避免使用委托模式,在委托模式中,我们通常创建一个属性引用,以便将委托的值设置到每个协调器节点。

拦截器模式

这里的用途很简单,我们可以创建一个链表,并且每个元素都可以响应一个特定的动作。

如何安装它?

Swift Package Manager

要将 Responder 作为 Swift Package Manager 包使用,只需在您的 Package.swift 文件中添加以下内容。

.package(url: "https://github.com/bfernandesbfs/Responder.git", .upToNextMajor(from: "0.0.1"))

许可证

这里