Skip to content

Instantly share code, notes, and snippets.

@bryanrmq
Created March 6, 2020 09:11
Show Gist options
  • Save bryanrmq/0c7e2f1ec1383f16b28ac67f5a8b8961 to your computer and use it in GitHub Desktop.
Save bryanrmq/0c7e2f1ec1383f16b28ac67f5a8b8961 to your computer and use it in GitHub Desktop.
Spectator library
import Foundation
@objc public class Spectator: NSObject {
/// Singleton instance
@objc static let shared: Spectator = Spectator()
// MARK: - Properties
private var providers: [SpectatorProvider] = []
private var logLevel: SpectatorLogLevel = .debug
private var isFireEventEnabled: Bool = true
var config: SpectatorConfigurator? {
didSet {
guard let config = config else { return }
providers = config.providers
logLevel = config.logLevel
isFireEventEnabled = config.isFireEventEnabled
}
}
// MARK: - Init
private override init() {}
// MARK: - Methods
static func fire(_ event: SpectatorEventType, withParameters parameters: [String: String]? = nil) {
for provider in Spectator.shared.providers {
log(event, parameters, provider)
if event.allowedProviders.contains(provider.providerType) {
provider.fire(event, withParameters: parameters)
}
}
}
// MARK: - Helpers
private static func log(_ event: SpectatorEventType, _ parameters: [String: String]?, _ provider: SpectatorProvider) {
switch Spectator.shared.logLevel {
case .debug:
print("[Spectator > \(provider.providerType.identifier)]\n\t> Event: \(event.name)\n\t> isSent: \(Spectator.shared.isFireEventEnabled)\n\t> Parameters: \(parameters ?? [:])")
default:
break
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment