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