【发布时间】:2016-03-26 22:38:35
【问题描述】:
这就是我想要的。我正在写一个非常简单的event dispatcher(单击该链接查看我的代码)。当我只有 listen() 和 fire() 方法时,它工作正常。这就是你可以使用它的方式:
struct UserHasBirthday: Event {
let name: String
init(name: String) {
self.name = name
}
}
let events = TestDispatcher()
events.listen {
(event: UserHasBirthday) in
print("Happy birthday \(event.name)!")
}
events.fire( UserHasBirthday(name: "John Doe") )
这一切都很好,但现在我想添加一个功能,您可以将事件推送到队列中,然后一次性触发它们。这就是我添加 push 和 flush 方法的原因。
现在的问题是,在flush() 方法中,我需要能够将通用Event 类型向下转换为给定的特定事件类型。否则fire() 方法不起作用。
所以我想,也许我可以将类型信息保存在与事件本身相同的数组中。正如你所看到的,我试图用一个元组来做到这一点。不幸的是,它不是那样工作的。
我认为,如果我能找到一种方法使变量 pushedEvents 接受像这样的泛型类型:var pushedEvents = Array<E: Event>() 那么它就可以工作。但我知道这样做的唯一方法是将泛型分配给整个类,如下所示:class TestDispatcher<E: Event> { },但是该类的每个实例只能用于一种特定类型的事件,我绝对不希望那样.
有没有人知道某种方法来完成这项工作?
【问题讨论】: