Responder 是一个软件包,它提供了一种通过责任链发送数据的方式,它基于委托模式实现了更好的协议,并提供了一个比通知中心更好的解决方案。
非常简单。首先,我们只需实现 Responder
协议,在我们希望创建基于值类型或引用的链表的地方。请看下面的例子。
struct Object: Responder {
var nextResponder: Responder?
}
基本上,我们希望通过这个列表发送数据,并且我们需要有人来回答他们是否可以执行此操作。我们如何实现这一点?这个实现背后的思想是将委托模式和通知中心融合起来,使用责任链模式。
按照这个例子,我们需要遍历每个对象,并检查我们是否可以执行或不执行一个动作。如果不能,那么我们检查链中的下一个元素。
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)
看到了吗?很简单
我们可以使用它来避免使用委托模式,在委托模式中,我们通常创建一个属性引用,以便将委托的值设置到每个协调器节点。
这里的用途很简单,我们可以创建一个链表,并且每个元素都可以响应一个特定的动作。
要将 Responder
作为 Swift Package Manager 包使用,只需在您的 Package.swift 文件中添加以下内容。
.package(url: "https://github.com/bfernandesbfs/Responder.git", .upToNextMajor(from: "0.0.1"))