Latest 2.2.0
License MIT
Platforms ios 9.0, requires ARC

Build Status
Swift 4
Carthage compatible
GitHub release

Swift object that provides an observable platform for multiple listeners.


  • iOS 9.0+
  • Xcode 9.x+
  • Swift 4


Listenable is available through CocoaPods. To install it, simply add the following line to your Podfile:

    pod 'Listenable'

And run pod install.


Create a Listenable object either by inheriting or initializing a Listenable typed with a protocol:

    class ListenableObject: Listenable<ListenableDelegate> {
      // Class

You can then add and remove listeners, and update them as required…

Add Listener(s):

    add(listener: Listener, priority: ListenerPriority) -> Bool
    add(listeners: [Listener], priority: ListenerPriority) -> Void

Remove Listener(s):

    remove(listener: Listener) -> Bool
    remove(listeners: [Listener]) -> Void

Enumerate & Update Listeners:

    updateListeners(update: (listener: Listener, index: Int) -> Void)


ListenerPriority allows for definition of enumeration priority for a listener; by default the priority parameter is set to .low. The following values can be assigned:

    .low        (Raw: 0)
    .high       (Raw: 1000)
    .custom     (Valid range: 0-1000)

Listeners can also be updated exclusively relative to their priority:

    updateListeners(withPriority: ListenerPriority?, 
                          update: (listener: Listener, index: Int) -> Void)

    updateListeners(withPriorities: ClosedRange<Int>?, 
                            update: (listener: Listener, index: Int) -> Void)


Bug reports and pull requests are welcome on GitHub at


The library is available as open source under the terms of the MIT License.

Latest podspec

    "name": "Listenable",
    "platforms": {
        "ios": "9.0"
    "requires_arc": true,
    "version": "2.2.0",
    "summary": "Swift Observable object",
    "description": "Swift object that provides an observable platform for multiple listeners.",
    "homepage": "",
    "license": "MIT",
    "authors": {
        "Merrick Sapsford": "[email protected]"
    "social_media_url": "",
    "source": {
        "git": "",
        "tag": "2.2.0"
    "source_files": "Sources/Listenable/**/*.{h,m,swift}"

Pin It on Pinterest

Share This