50 lines
1.4 KiB
Swift
50 lines
1.4 KiB
Swift
//
|
|
// 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]?)
|
|
}
|