Emit is a simple signals library for Swift. It lets you emit strongly-typed events and you don’t have to worry about disposing of subscriptions. Emit supports emit/subscribe, map, and filter. Which makes it ideal for keeping your code simple.
Emit has been developed for use in the Hootsuite iOS app.
Features
Strongly-typed events
Mapping and filtering of signals
Observable variables
Requirements
iOS 11.0+, macOS 10.12+, tvOS 10.0+
Xcode 10.1+
Usage
Signal
To create a signal you specify the event type that will passed to the subscription closure. You can also specify Void if you don’t want to include an event.
// Create a signal
let loginCompleteSignal = Signal<Bool>()
To subscribe to a signal you pass an owner. The owner needs to be an object (an instance of a class as opposed to a struct). When the owner gets released the subscriptions stops automatically. You may also pass a DispatchQueue that you would like the closure to be called on, the default is DispatchQueue.main.
// Subscribe to it
loginCompleteSignal.subscribe(owner: self) { result in
// Handle signal
}
To emit a signal simply call emit with the event value. Note that subscribers will be called on the next run loop of their specified queue.
// Emit an event
loginCompleteSignal.emit(true)
ObservableVariable
Observable variables combine a value and a signal. The signal gets emitted every time the value changes.
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
Demo Project
See the demo project provided for example usage of the Emit framework.
Emit
Emit is a simple signals library for Swift. It lets you emit strongly-typed events and you don’t have to worry about disposing of subscriptions. Emit supports emit/subscribe, map, and filter. Which makes it ideal for keeping your code simple.
Emit has been developed for use in the Hootsuite iOS app.
Features
Requirements
Usage
Signal
To create a signal you specify the event type that will passed to the subscription closure. You can also specify
Void
if you don’t want to include an event.To subscribe to a signal you pass an owner. The owner needs to be an object (an instance of a
class
as opposed to astruct
). When the owner gets released the subscriptions stops automatically. You may also pass aDispatchQueue
that you would like the closure to be called on, the default isDispatchQueue.main
.To emit a signal simply call
emit
with the event value. Note that subscribers will be called on the next run loop of their specified queue.ObservableVariable
Observable variables combine a value and a signal. The signal gets emitted every time the value changes.
Demo Project
See the demo project provided for example usage of the Emit framework.
Installation
Emit can be installed using either Carthage or CocoaPods.
Carthage
To integrate Emit into your Xcode project using Carthage, specify it in your Cartfile:
CocoaPods
First, add the following line to your Podfile:
Second, install Emit into your project:
Future Work
We have been very pleased with what we have been able to achieve when with Emit, but there are a few things we have on the wishlist:
didSet
even if the value is the same.License
Emit is released under the Apache License, Version 2.0. See LICENSE.md for details.