• Stars
    star
    1,100
  • Rank 42,169 (Top 0.9 %)
  • Language
    Swift
  • License
    MIT License
  • Created almost 10 years ago
  • Updated almost 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A publish/subscribe EventBus optimized for iOS

SwiftEventBus

Language Language Language Language

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

Features

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

Installation

Cocoapods

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

Carthage

github "cesarferreira/SwiftEventBus" == 5.1.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")

More Repositories

1

dryrun

โ˜๏ธ Try the demo project of any Android Library
Ruby
3,825
star
2

drone

๐Ÿฐ The missing library manager for Android Developers
JavaScript
516
star
3

alfi

Android Library Finder
Ruby
503
star
4

RxPeople

Observing people... wait what?
Java
424
star
5

colorize

Access to 1000+ colors on android!
Java
410
star
6

CatKit

Android kit for cat placeholders ๐Ÿฑ
Java
270
star
7

AndroidQuickUtils

Android Development Utils
Java
260
star
8

purrge

๐Ÿฑ Quickly purrge android apps from your phone
JavaScript
186
star
9

RxPaper

Reactive extension for NoSQL data storage on Android
Java
176
star
10

android-rocket-launcher

๐Ÿš€ Launch android modules from the terminal
Kotlin
164
star
11

gradlr

๐ŸŒ€ Fastest auto complete for gradle tasks
JavaScript
152
star
12

MaterialComponent.Banner

Material component for Android: Banner
Kotlin
115
star
13

international

Tool to convert CSV to localization specific files (ios/android)
Ruby
101
star
14

j2j

Convert any file.json to the corresponding mapped java files
Ruby
64
star
15

faker

A kotlin extension to load images asynchronously on android
Kotlin
58
star
16

kotlin-pluralizer

โ˜€๏ธ Kotlin extension to pluralize and singularize strings
Kotlin
50
star
17

react-native-logcat

โšก Colored Logcat for react-native android
Ruby
48
star
18

tempo

โŒšKotlin intuitive Date extensions.
Kotlin
39
star
19

seguro

Secure persistence using AES+CBC encryption on Android with no dependencies.
Kotlin
35
star
20

flutter-architecture-example

Easy Flutter architecture using dependency injection (DI) + BLoC + State Manager + Repository Pattern
Dart
30
star
21

jsonify

Convert any Java object to JSON for easier debugging
Java
27
star
22

git-gud

:octocat: Tool to enhance your github workflow
JavaScript
26
star
23

goplaces

๐Ÿ’ช Launch apps on your phone/emulator from the terminal
JavaScript
26
star
24

monzo-cli

๐Ÿ’ณ Monzo bank command line interface client
Ruby
26
star
25

gito

โšก git helper tool to clone/open/auto-install/edit with a one-liner
Ruby
26
star
26

interactive-git-tag

:octocat: Interactive tool that helps with your git tagging by suggesting versions
JavaScript
25
star
27

facelift

Quick github-pages generator
JavaScript
24
star
28

lasertag

Automatically map android app versions to git tags
Ruby
24
star
29

generator-android-library

Boilerplate code for creating an android library
JavaScript
23
star
30

open-on-android

Open anything on your android phone
JavaScript
22
star
31

tray-apk-install

๐Ÿ’Ž Fastest way to install APKs
JavaScript
19
star
32

Pretender

Lorem Ipsum, but for people [android]
Java
18
star
33

clean-idea

Fastest way to cleanup your IntelliJ IDEA files
Ruby
16
star
34

android-latest

Latest android versions for developers (buildTools, TargetSdk, etc.)
HTML
14
star
35

android-unique-device-id

Generate a 64-bit hex string as an unique Android ID
Kotlin
14
star
36

awsnap

๐Ÿ„ Generate beautiful screenshots
JavaScript
13
star
37

node-adb-api

A node API for adb (android debug bridge)
JavaScript
12
star
38

yap-json

๐Ÿ‹ Lightweight colorized JSON prettifier for the terminal
JavaScript
12
star
39

apu

โ˜• Set of useful tools for android developers
Ruby
11
star
40

PainlessPrefs

Static way to use android preferences, no hassle
Java
11
star
41

UIState

Cleanest way of representing UI state in a flutter widget.
C++
11
star
42

pod-tools

Set of Cocoapods tools (clean, reinstall, clean derived data)
Ruby
9
star
43

oh

Quickly open any app in the folder you're currently in (Open Here)
JavaScript
8
star
44

lgtv-cli

CLI to control LG TV with WebOS
JavaScript
7
star
45

drone-hive

Companion repository for https://github.com/cesarferreira/drone
JavaScript
7
star
46

robin

JSON driven CLI tool
JavaScript
6
star
47

UserAgentForAndroid

Easily add app context to your android API calls
Kotlin
5
star
48

timecop

Static way to count time in android
Java
4
star
49

readme-senpai

Pretty prints markdown in the terminal given a gituhub username/repo
JavaScript
4
star
50

generator-node-skeleton

A yeoman generator for node modules
JavaScript
3
star
51

clap-detector-android

Kotlin
3
star
52

generator-node-cli-skeleton

A yeoman generator for a node cli app
JavaScript
3
star
53

node-time-log

console.log() with a beautiful timestamp
JavaScript
3
star
54

fpm

WIP - Flutter Package Manager
Dart
3
star
55

myboy

CSS
2
star
56

chef-cli

Quickly convert things into other things
JavaScript
2
star
57

insta-story

Creates an instagram story like UI
Kotlin
2
star
58

foodbot

A slack bot that knows what street food is available @ Paddington Central
JavaScript
2
star
59

generator-kotlin-mvp-dagger

generator-kotlin-starterkit
Kotlin
2
star
60

better-version

Kotlin
2
star
61

mvvm-arch-components-click-handling

Sample with MVVM google architecture components click handling
Kotlin
2
star
62

kotlin-dagger2-LettersAndNumbers

Example of Android project showing integration with Kotlin and Dagger 2
Kotlin
1
star
63

android-helloworld

just a sample project
Java
1
star
64

pod_player

Dart
1
star
65

json

JavaScript
1
star
66

jetpack-navigation-component-example

Example of jetpack navigation component with conditional login case
Kotlin
1
star
67

cesarferreira.github.io

HTML
1
star
68

release-notes

WIP - Tool to get release notes based on commit messages between commits
JavaScript
1
star
69

node-read-url

Reads an URL into a string
JavaScript
1
star
70

sample-data

JavaScript
1
star
71

flutterfy-cli

Flutter CLI tool to increase development speed
Ruby
1
star
72

swearjar

Static code analysis that looks for swear words in your codebase
Python
1
star
73

cm_to_nanoacres

Useless tool that converts cm2 into nanoacres
Rust
1
star