# Utils API Migration Table (OC -> LN Swift) | OC Class | OC API | Swift Class | Swift API | Status | |---|---|---|---|---| | `QGVAPLogger` | `+log:file:line:func:module:message:` | `LNVAPLogger` | `@objc(logLevel:file:line:func:module:message:)` | Baseline Done | | `QGVAPLogger` | `+registerExternalLog:` | `LNVAPLogger` | `registerLogHandler(_:)` | Baseline Done | | `QGVAPSafeMutableArray` | 线程安全增删改查 | `LNVAPSafeMutableArray` | `count/object(at:)/add/insert/remove...` | Baseline Done | | `QGVAPSafeMutableDictionary` | 线程安全 key-value 操作 | `LNVAPSafeMutableDictionary` | `count/object(forKey:)/set/remove...` | Baseline Done | | `QGVAPWeakProxy` | `proxyWithTarget:` + 弱转发 | `LNVAPWeakProxy` | `proxy(with:)` + `forwardingTarget` | Baseline Done | | `QGVAPMetalShaderFunctionLoader` | `initWithDevice:` / `loadFunctionWithName:` | `LNVAPMetalShaderFunctionLoader` | 等价 API | Baseline Done | | `QGVAPMetalUtil` | 顶点/纹理坐标/布局计算 | `LNVAPMetalUtil` | `genVertices/genTextureCoordinates/...` | Baseline Done | | `UIDevice(VAPUtil)` | `+systemVersionNum` / `kDefaultMTLResourceOption` | `LNVAPDeviceUtil` | `systemVersionNum/defaultMTLResourceOption` | Baseline Done | | `NSArray(VAPUtil)` | `-hwd_rectValue` | `NSArray(LN)` | `ln_rectValue()` | Baseline Done | | `NSDictionary(VAPUtil)` | `hwd_float/integer/string/dic/arrValue` | `NSDictionary(LN)` | `ln_floatValue/ln_integerValue/ln_stringValue/...` | Baseline Done | | `UIColor(VAPUtil)` | `+hwd_colorWithHexString:` | `UIColor(LN)` | `ln_color(hexString:)` | Baseline Done | | `UIGestureRecognizer(VAPUtil)` | block 初始化/添加/移除 | `UIGestureRecognizer(LN)` | `ln_initWithActionBlock/ln_addActionBlock/ln_removeAllActionBlocks` | Baseline Done | | `NSNotificationCenter(VAPThreadSafe)` | 安全 observer/weak observer | `NotificationCenter(LN)` | `ln_addSafeObserver/ln_addWeakObserver` | Baseline Done | ## Files - `/Users/yanxuyao/Vap/QGVAPlayer/QGVAPlayer/LNSwift/Utils/LNUtilities.swift`