Emit 是一个简单的 Swift 信号库。它允许你发出强类型的事件,并且你无需担心释放订阅。Emit 支持 emit/subscribe(发送/订阅)、map(映射)和 filter(过滤),这使得它非常适合保持你的代码简洁。
Emit 是为 Hootsuite iOS 应用程序开发的。
注意:Emit 用户
我们想通知您,Emit 库已被弃用,并将于 2024 年 9 月 1 日起停止维护。做出此决定是经过仔细考虑的结果,原因是现在有更好的替代方案,例如 Combine。
要创建一个信号,你需要指定将传递给订阅闭包的事件类型。 如果你不想包含事件,也可以指定 Void
。
// Create a signal
let loginCompleteSignal = Signal<Bool>()
要订阅一个信号,你需要传递一个 owner(所有者)。所有者需要是一个对象(一个 class
的实例,而不是一个 struct
)。当所有者被释放时,订阅会自动停止。 你也可以传递一个 DispatchQueue
,你希望闭包在该队列上被调用,默认是 DispatchQueue.main
。
// Subscribe to it
loginCompleteSignal.subscribe(owner: self) { result in
// Handle signal
}
要发送一个信号,只需使用事件值调用 emit
。请注意,订阅者将在他们指定的队列的下一个运行循环中被调用。
// Emit an event
loginCompleteSignal.emit(true)
可观察的变量结合了一个值和一个信号。 每当该值更改时,信号就会被发送。
let email = ObservableVariable("")
email.signal.subscribe(owner: self) { newEmail in
// Update UI with new email
}
email.value = "test_email@gmail.com" // This will emit the signal to update the UI
请参阅提供的演示项目,了解 Emit 框架的用法示例。
Emit 可以使用 Carthage 或 CocoaPods 进行安装。
要使用 Carthage 将 Emit 集成到你的 Xcode 项目中,请在你的 Cartfile 中指定它
github "hootsuite/Emit"
首先,将以下行添加到你的 Podfile 中
pod 'Emit'
其次,将 Emit 安装到你的项目中
pod install
Emit 在 Apache License, Version 2.0 下发布。 有关详细信息,请参见 LICENSE.md。