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]?)
 | |
| }
 |