Latest 5.0.0
Homepage https://github.com/cesarferreira/SwiftEventBus
License MIT
Platforms ios 8.0, osx 10.10, requires ARC
Authors

Allows publish-subscribe-style communication between components without requiring the components to explicitly be aware of each other

Features

  • [x] simplifies the communication between components
  • [x] decouples event senders and receivers
  • [x] avoids complex and error-prone dependencies and life cycle issues
  • [x] makes your code simpler
  • [x] is fast
  • [x] is tiny
  • [x] Thread-safe

Installation

Cocoapods

pod 'SwiftEventBus', :tag => '5.0.0', :git => 'https://github.com/cesarferreira/SwiftEventBus.git'

Carthage

github "cesarferreira/SwiftEventBus" == 5.0.0

Versions

  • 5.+ for swift 5
  • 3.+ for swift 4.2
  • 2.+ for swift 3
  • 1.1.0 for swift 2.2

Usage

1 – Prepare subscribers

Subscribers implement event handling methods that will be called when an event is received.

SwiftEventBus.onMainThread(target, name: "someEventName") { result in
    // UI thread
}

// or

SwiftEventBus.onBackgroundThread(target, name:"someEventName") { result in
    // API Access
}

2 – Post events

Post an event from any part of your code. All subscribers matching the event type will receive it.

SwiftEventBus.post("someEventName")

Eventbus with parameters

Post event

SwiftEventBus.post("personFetchEvent", sender: Person(name:"john doe"))

Expecting parameters

SwiftEventBus.onMainThread(target, name:"personFetchEvent") { result in
    let person : Person = result.object as Person
    println(person.name) // will output "john doe"
}

Posting events from the BackgroundThread to the MainThread

Quoting the official Apple documentation:

Regular notification centers deliver notifications on the thread in which the notification was posted

Regarding this limitation, @nunogoncalves implemented the feature and provided a working example:


@IBAction func clicked(sender: AnyObject) {
     count++
     SwiftEventBus.post("doStuffOnBackground")
 }

 @IBOutlet weak var textField: UITextField!

 var count = 0

 override func viewDidLoad() {
     super.viewDidLoad()

     SwiftEventBus.onBackgroundThread(self, name: "doStuffOnBackground") { notification in
         println("doing stuff in background thread")
         SwiftEventBus.postToMainThread("updateText")
     }

     SwiftEventBus.onMainThread(self, name: "updateText") { notification in
         self.textField.text = "(self.count)"
     }
}

//Perhaps on viewDidDisappear depending on your needs
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    SwiftEventBus.unregister(self)
}

Unregistering

Remove all the observers from the target

SwiftEventBus.unregister(target)

Remove observers of the same name from the target

SwiftEventBus.unregister(target, "someEventName")

Latest podspec

{
    "name": "SwiftEventBus",
    "version": "5.0.0",
    "license": "MIT",
    "summary": "Publish/subscribe event bus optimized for iOS",
    "homepage": "https://github.com/cesarferreira/SwiftEventBus",
    "social_media_url": "http://twitter.com/cesarmcferreira",
    "authors": {
        "Cu00e9sar Ferreira": "[email protected]"
    },
    "source": {
        "git": "https://github.com/cesarferreira/SwiftEventBus.git",
        "tag": "5.0.0"
    },
    "platforms": {
        "ios": "8.0",
        "osx": "10.10"
    },
    "source_files": "SwiftEventBus/SwiftEventBus.swift",
    "requires_arc": true
}

Pin It on Pinterest

Share This