// // ClassLoader.swift // LeStorage // // Created by Laurent Morvillier on 22/11/2024. // import Foundation class ClassLoader { static var classCache: [String : AnyClass] = [:] static func getClass(_ className: String, classProject: String? = nil) -> AnyClass? { if let cachedClass = classCache[className] { return cachedClass } if let bundleName = Bundle.main.infoDictionary?["CFBundleName"] as? String { let sanitizedBundleName = bundleName.replacingOccurrences(of: " ", with: "_") let fullName = "\(sanitizedBundleName).\(className)" if let projectClass = _getClass(fullName) { return projectClass } } if let classProject { let sanitizedBundleName = classProject.replacingOccurrences(of: " ", with: "_") let fullName = "\(sanitizedBundleName).\(className)" if let projectClass = _getClass(fullName) { return projectClass } } let leStorageClassName = "LeStorage.\(className)" if let projectClass = _getClass(leStorageClassName) { return projectClass } return nil } static func _getClass(_ className: String) -> AnyClass? { if let loadedClass = NSClassFromString(className) { classCache[className] = loadedClass return loadedClass } return nil } }