GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - Tremollo/emitter-kit: Type-safe event handling for Swift

BranchesTags
Open more actions menu
 
 

Latest commit

 

History

16 Commits
16 Commits

Folders and files

NameName
Last commit message
Last commit date
EmitterKit.xcodeproj
EmitterKit.xcodeproj
 
 
EmitterKitSpecs
EmitterKitSpecs
 
 
src
src
 
 
tests
tests
 
 
.gitignore
.gitignore
 
 
EmitterKit-Info.plist
EmitterKit-Info.plist
 
 
EmitterKit.podspec
EmitterKit.podspec
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 

Repository files navigation

emitter-kit v5.0.0

stable CocoaPods Compatible Carthage Compatible Platform

A replacement for NSNotificationCenter#addObserver and NSObject#addObserver that is type-safe and not verbose.

import EmitterKit

// A generic event emitter (but type-safe)!
var event = Event<T>()

// Any emitted data must be the correct type.
event.emit(data)

// This listener will only be called once.
// You are *not* required to retain it.
event.once { data: T in
  print(data)
}

// This listener won't stop listening;
// unless you stop it manually,
// or its Event<T> is deallocated.
// You *are* required to retain it.
var listener = event.on { data: T in
  print(data)
}

// Stop the listener manually.
listener.isListening = false

// Restart the listener (if it was stopped).
listener.isListening = true

Targeting

A target allows you to associate a specific AnyObject with an emit call. This is useful when emitting events associated with classes you can't add properties to (like UIView).

When calling emit with a target, you must also call on or once with the same target in order to receive the emitted event.

let myView = UIView()
let didTouch = Event<UITouch>()

didTouch.once(myView) { touch in
  print(touch)
}

didTouch.emit(myView, touch)

NSNotification

The Notifier class helps when you are forced to use NSNotificationCenter (for example, if you want to know when the keyboard has appeared).

// You are **not** required to retain this after creating your listener.
var event = Notifier(UIKeyboardWillShowNotification)

// Handle NSNotifications with style!
listener = event.on { (userInfo: NSDictionary) in
  print(userInfo)
}

Key-Value Observation (KVO)

// Any NSObject descendant will work.
var view = UIView()

// "Make KVO great again!" - Donald Trump
listener = view.on("bounds") { (change: Change<CGRect>) in
  print(change)
}

v5.0.0 changelog

  • Swift 3.0 + Xcode 8.0 beta 6 support

  • The Signal class was removed. (use Event<Void> instead)

  • The Emitter abstract class was removed.

  • The EmitterListener class was renamed EventListener<T>.

  • The Event<T> class no longer has a superclass.

  • The Notification class was renamed Notifier (to prevent collision with Foundation.Notification).

  • The on and once methods of Event<T> now return an EventListener<T> (instead of just a Listener)

  • The on and once methods of Notifier now return an NotificationListener (instead of just a Listener)

  • The on and once methods of NSObject now return an ChangeListener<T> (instead of just a Listener)

  • The keyPath, options, and object properties of ChangeListener<T> are now public.

  • A listenerCount: Int computed property was added to the Event<T> class.

  • An event: Event<T> property was added to the EventListener<T> class.

The changelog for older versions can be found here.

Known bugs

  • The ChangeListener class may throw an exception (looking for help):
An -observeValueForKeyPath:ofObject:change:context: message was received but not handled.```

About

Type-safe event handling for Swift

Resources

Readme
MIT license
Activity
Custom properties

Stars

0 stars

Watchers

1 watching

Forks

0 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.