Shouter 是一种简单、安全、轻量级的点对多点通信方式。它是与 NotificationCenter 相对的类型、内存和线程安全替代方案。
- 类型安全:不再需要通过
userInfo: [String: Any]
字典进行受保护的类型转换。 - 线程安全:您可以在任何线程中安全地
register
、notify
、unregister
而不会崩溃和数据损坏。 - 内存安全:
Shouter
使用NSHashTable
通过零初始化弱引用来存储观察器。无需崩溃,也无需在释放前手动unregister
。
用法
定义一个协议,您的观察者实现该协议
protocol SomeNotification {
func somethingHappened(value: String)
}
class ViewController: UIViewController { /* ... */ }
extension ViewController: SomeNotification {
func somethingHappened(value: String) {
self.titleLabel.text = "Something happened: \(value)"
}
}
有一个 观察者
let vc = ViewController()
注册 观察者以接收通知
Shouter.default.register(SomeNotification.self, observer: vc)
通知 所有观察者
Shouter.default.notify(SomeNotification.self) {
$0.somethingHappened(value: "Hello World")
}
注销,当观察者不再对通知感兴趣时
Shouter.default.unregister(SomeNotification.self, observer: vc)
安装
CocoaPods
pod 'Shouter'
鸣谢
Shouter 吸收并部分基于库 100mango/SwiftNotificationCenter。
徽标基于 Broadcast 图标,由 Amy Chiang 提供,来自 the Noun Project。