Skip to content

Instantly share code, notes, and snippets.

@achernoprudov
Created May 24, 2021 11:07
Show Gist options
  • Save achernoprudov/8536e2c1bfe51e6501d4fda6db774159 to your computer and use it in GitHub Desktop.
Save achernoprudov/8536e2c1bfe51e6501d4fda6db774159 to your computer and use it in GitHub Desktop.
Analytics
extension AnalyticsEvent {
static func searchForUser(with query: String) -> AnalyticsEvent {
return AnalyticsEvent(name: "Search for user", attributes: [.query: query])
}
}
public struct AnalyticsEvent {
typealias Attributes = [Key: Any]
let name: String
let attributes: Attributes
}
public extension AnalyticsEvent {
enum Key: String, CaseIterable {
case query
case result
case duration
}
}
public class AnalyticsFacade {
// MARK: - Static
public static let `default` = AnalyticsFacade()
// MARK: - Instance variables
private var services: [AnalyticsService]
// MARK: - Public
public func log(_ event: AnalyticsEvent) {
// Can be on the separate queue
for service in services {
service.log(event)
}
func register(_ service: AnalyticsService) {
services.append(service)
}
}
public protocol AnalyticsService {
func log(_ event: AnalyticsEvent)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment