FusionAds-iOS/FusionAds/Classes/fusion/utils/AnalyticsEvents.swift

50 lines
1.4 KiB
Swift
Raw Normal View History

//
// MabAnalyticsEvents.swift
// Pods
//
// Created by 250102 on 2025/5/10.
//
// AnalyticsEvents
internal class AnalyticsEvents {
//
static let shared = AnalyticsEvents()
//
private init() {}
// 使NSHashTable
private var handlers = NSHashTable<AnyObject>.weakObjects()
func registerHandler(handler: AnalyticsEventHandler) {
handlers.add(handler as AnyObject)
}
func unregisterHandler(handler: AnalyticsEventHandler) {
for existingHandler in handlers.allObjects {
if let existing = existingHandler as? AnalyticsEventHandler,
existing === handler as AnyObject {
handlers.remove(existingHandler)
break
}
}
}
func onEvent(name: String, param: [String: Any]? = nil) {
for case let handler as AnalyticsEventHandler in handlers.allObjects {
handler.onEvent(name: name, param: param)
}
}
func onEvent(name: String, pairs: (String, any Any)...) {
let paramMap = Dictionary(uniqueKeysWithValues: pairs)
onEvent(name: name, param: paramMap)
}
}
// AnalyticsEventHandler - Hashable
public protocol AnalyticsEventHandler: AnyObject {
func onEvent(name: String, param: [String: Any]?)
}