# 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`
