• Stars
    star
    1,082
  • Rank 41,139 (Top 0.9 %)
  • Language
    Swift
  • License
    MIT License
  • Created about 9 years ago
  • Updated about 3 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,822
star
2

drone

🍰 The missing library manager for Android Developers
JavaScript
515
star
3

alfi

Android Library Finder
Ruby
502
star
4

RxPeople

Observing people... wait what?
Java
425
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
185
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
163
star
11

gradlr

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

MaterialComponent.Banner

Material component for Android: Banner
Kotlin
114
star
13

international

Tool to convert CSV to localization specific files (ios/android)
Ruby
102
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
49
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
29
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

lasertag

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

generator-android-library

Boilerplate code for creating an android library
JavaScript
23
star
29

facelift

Quick github-pages generator
JavaScript
23
star
30

open-on-android

Open anything on your android phone
JavaScript
20
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
13
star
36

yap-json

πŸ‹ Lightweight colorized JSON prettifier for the terminal
JavaScript
12
star
37

awsnap

πŸ„ Generate beautiful screenshots
JavaScript
12
star
38

node-adb-api

A node API for adb (android debug bridge)
JavaScript
11
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

Run scripts for any project
JavaScript
5
star
47

UserAgentForAndroid

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

readme-senpai

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

timecop

Static way to count time in android
Java
4
star
50

generator-node-cli-skeleton

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

node-time-log

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

generator-node-skeleton

A yeoman generator for node modules
JavaScript
3
star
53

fpm

WIP - Flutter Package Manager
Dart
3
star
54

clap-detector-android

Kotlin
2
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

better-version

Kotlin
2
star
60

generator-kotlin-mvp-dagger

generator-kotlin-starterkit
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