AmazingEvent
is a generic and retention cycle free Event
that enables instance of any type to notify multiple classes when something of interest occurs.
In other words, it's an attempt to bring C# like Event
to Swift and exploring what Swift version of Target-Action
is like.
The type that sends an Event
is called the publisher
and the classes that handle an Event
are called subscribers
.
import AmazingEvent
class Car {
// It's better to keep an event publisher private if you don't want it to be invoked by some other class.
private var didStartPublisher = AmazingEventPublisher<Date>()
// On initialization AmazingEventPublisher creates assosiated AmazingEvent.
// Your job is to make this assosiated event reachable without exposing an event publisher itself.
private(set) lazy var didStart = didStartPublisher.event
// ...
func start() {
// Invokes the event by passing `self` as a sender.
didStartPublisher.invoke(sender: self, parameter: Date())
}
}
import AmazingEvent
class CarTestBench {
init(car: Car) {
car.didStart.subscribe(target: self, handleAction: CarTestBench.carDidStart)
}
private func carDidStart(sender: AnyObject?, parameter: Date) {
// ...
}
}
- macOS 10.14+
- iOS 11.0+
- tvOS 11.0+
- watchOS 4.0+
- Xcode 11+
- Swift 5.0+
To integrate AmazingEvent
into your Xcode project using CocoaPods, specify it in your Podfile
:
pod 'AmazingEvent', '~> 2.0'
To integrate AmazingEvent
into your Xcode project using Swift Package Manager, specify it as dependency in your Package.swift
:
dependencies: [
.package(url: "https://github.com/khamitimur/AmazingEvent.git", .upToNextMajor(from: "2.0.0"))
]
This project is licensed under the MIT License.
- Inspired by article by Colin Eberhardt.