To·lo | tō - lō |
副词
阿姆哈拉语中的“快点”
Tolo 是一个由 Otto 启发的事件发布/订阅框架,旨在在解耦您的 iOS 应用不同部分的同时,仍然允许它们高效通信。传统的订阅和触发通知方法既繁琐又容易出错,编译时间检查也有限。
有关最新使用说明,请参阅网站。
Tolo 预期用作单例(尽管不是必需的)。以下示例中使用的宏利用了 Tolo.sharedInstance 的共享实例。使用这些宏是可选的,但强烈建议您使用它们。
使用宏 PUBLISH() 可以轻松直接地进行事件发布。这允许您通知订阅者已经发生了一个动作。任何类的实例都可以发布一个事件,并且它只会被派送给该类型的订阅者。
要发布一个事件,请创建您要发布的事件的实例(例如:EventProgressUpdated),并使用如下 PUBLISH() 宏:
PUBLISH(event);
其中 event 是事件的一个实例(例如:EventProgressUpdated *event = ...)。
订阅是事件发布的补充——它允许您接收有关事件发生的通知。要订阅一个事件,请使用宏 SUBSCRIBE(),并传入您希望订阅的事件类型,如下所示
SUBSCRIBE(EventProgressUpdated)
{
// use the variable event -- for example: self.progressView.progress = event.progress
}
为了接收事件,类实例需要向 Tolo 注册。要注册,只需使用宏 REGISTER(),传入类的实例
REGISTER(self);
在订阅事件时,经常想要同时获取特定事件(例如,当前位置、活动用户等)的当前已知值。为了解决这种常见范式,Tolo 引入了“生产者”的概念,它们在注册时为任何订阅者提供即时回调。
要创建生产者,请使用宏 PUBLISHER()
PUBLISHER(EventProgressUpdated)
{
return instance-of-EventProgressUpdated;
}
生产者,像订阅者一样,也必须注册
REGISTER(self);
在注册时,生产者方法将只为先前为同一类型注册的任何数量的订阅者调用一次。然而,每当有新方法订阅同一类型的事件时,生产者方法也会调用一次。
每次只能为每个事件类型注册一个生产者——最后一个订阅的生产者将被使用。
由于有时可能不清楚您接收回调的线程是哪个,Tolo提供了一种强制机制,以确保您始终在主线程上被调用。默认情况下,与实例的所有交互都限制在主线程上(可以使用公开属性Tolo.forceMainThread -- YES来更改,默认为YES)。
安装Tolo有三种简单的方法
pod 'tolo', '~>1.0'