You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在macOS上使用Swift实现打印机ID与打印机名称的映射

在macOS上用Swift实现打印机ID到名称的映射

我帮你把Objective-C版本的打印机ID到名称映射逻辑转换成Swift版本了,直接看下面的代码和说明就可以用:

完整Swift实现代码

import Foundation

func mapPrinterIDToName() -> [String: String] {
    var printerList: CFArray?
    let status = PMServerCreatePrinterList(kPMServerLocal, &printerList)
    
    // 检查是否成功获取打印机列表
    guard status == noErr, let printers = printerList else {
        print("无法获取打印机列表")
        return [:]
    }
    
    var printerIDToNameMap = [String: String]()
    let printerCount = CFArrayGetCount(printers)
    
    // 遍历所有打印机
    for index in 0..<printerCount {
        guard let printer = CFArrayGetValueAtIndex(printers, index) as? PMPrinter else {
            continue
        }
        
        // 获取打印机唯一ID
        guard let printerID = PMPrinterGetID(printer) as String? else {
            continue
        }
        
        // 获取打印机显示名称
        guard let printerName = PMPrinterGetName(printer) as String? else {
            continue
        }
        
        printerIDToNameMap[printerID] = printerName
    }
    
    // 释放Core Foundation对象(显式释放更稳妥)
    if let list = printerList {
        CFRelease(list)
    }
    
    return printerIDToNameMap
}

// 测试调用示例
let printerMapping = mapPrinterIDToName()
print("打印机ID与名称映射结果:")
for (printerID, printerName) in printerMapping {
    print("\(printerID) -> \(printerName)")
}

关键逻辑说明

  • 获取打印机列表:通过PMServerCreatePrinterList(kPMServerLocal, &printerList)获取本地所有打印机的列表,kPMServerLocal表示本地服务器
  • 遍历与信息提取:遍历列表中的每个PMPrinter对象,用PMPrinterGetID获取打印机的唯一标识ID,PMPrinterGetName获取用户可见的打印机名称
  • 内存管理:因为用到了Core Foundation的CFArray,显式调用CFRelease释放资源,避免内存泄漏(Swift的ARC对桥接对象有处理,但显式释放更安全)
  • 返回结果:最终返回一个[String: String]类型的字典,直接对应打印机ID到名称的映射

注意事项

  • 这个代码只能在macOS项目中使用,因为PMServer相关API是macOS专属的,iOS等其他平台不支持
  • 如果Xcode报错找不到相关API,可以检查项目是否链接了CoreServices框架(一般Xcode会自动处理,若未自动链接,可在项目Build Phases的Link Binary With Libraries中添加)
  • 访问本地打印机列表不需要特殊权限,若要访问远程打印机可能需要额外配置

内容的提问来源于stack exchange,提问作者Yusuke Terada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:07:45