Emit
Emit 是一个简单的 Swift 信号库。它允许您发出强类型事件,您无需担心订阅的销毁。Emit 支持 emit/subscribe、map 和 filter。这使得它非常适合保持代码简单。
Emit 已为 Hootsuite iOS 应用开发。
特性
- 强类型事件
- 信号的映射和过滤
- 可观察的变量
要求
- iOS 10.0+、macOS 10.12+、tvOS 10.0+
- Xcode 9.0+
使用
信号
创建信号时,您需要指定传递给订阅闭包的事件类型。如果您不希望包含事件,也可以指定 Void
。
// Create a signal
let loginCompleteSignal = Signal<Bool>()
要订阅一个信号,您需要传递一个所有者。所有者必须是一个对象(一个类的实例,而不是一个结构体的实例)。当所有者释放时,订阅自动停止。您还可以传递您希望闭包在其中调用的 .DispatchQueue
,默认为 .DispatchQueue.main
。
// Subscribe to it
loginCompleteSignal.subscribe(owner: self) { result in
// Handle signal
}
要触发一个信号,只需调用带有事件值的 emit
即可。注意,订阅者将在其指定队列的下一次运行循环中被调用。
// Emit an event
loginCompleteSignal.emit(true)
ObservableVariable
可观察变量将值和信号组合在一起。每当值改变时,都会发射信号。
let email = ObservableVariable("")
email.signal.subscribe(owner: self) { newEmail in
// Update UI with new email
}
email.value = "[email protected]" // This will emit the signal to update the UI
示例项目
请参阅提供的示例项目,以了解 Emit 框架的示例用法。
安装
Emit 可以使用 Carthage 或 CocoaPods 进行安装。
Carthage
要使用 Carthage 将 Emit 集成到您的 Xcode 项目中,请在 Cartfile 中指定它
github "hootsuite/Emit"
CocoaPods
首先,将以下行添加到您的 Podfile 中
pod 'Emit'
其次,安装 Emit 到您的项目中
pod install
未来工作
我们对使用 Emit 取得的成果非常满意,但还有一些事情在我们的愿望清单上。
- 将信号组合到 ObservableVariable 中,以便只调用一个闭包。类似于 RxSwift CombineLatest。
- 只有当值实际不同时才触发 ObservableVariable 信号。目前即使值相同也会在
didSet
上触发。
许可证
Emit 在 Apache License, Version 2.0 许可下发布。有关详细信息,请参阅 LICENSE.md。