我正试图通过这种方式获取所有本地打印机;
let serviceBrowser = NetServiceBrowser()
serviceBrowser.delegate = self
serviceBrowser.schedule(in: .current, forMode: .defaultRunLoopMode)
serviceBrowser.searchForServices(ofType: "_ipp._tcp.", inDomain:"local.")
它找到所有已连接的打印机,但我想知道它们的网址是否用UIPrinter
UIPrinter(url: URL("urlstring"))
func netServiceBrowser(_ browser: NetServiceBrowser, didFind service: NetService, moreComing: Bool) {
print(service)
// output: <NSNetService 0x1c0228960> local. _ipp._tcp. RICOH imagio MP C3302 [002673499B5F] -1
}
我不知道使用这种方式是否是找到本地/空气打印机的解决方案。
注意:UIPrinterPickerController
不是解决方案的选项。
答案 0 :(得分:1)
找到网络服务后,您需要resolve。然后,您可以执行类似的操作来构建要发送到AirPrint的UIPrinter。
let printerPath = "\(uri)://\(host):\(port)/" + (service.textRecordField(field: "rp") ?? "")
guard let printerUrl = URL(string: printerPath)
else { return nil }
let printer = UIPrinter(url: printerUrl)
这是我的扩展程序,用于从NetService对象获取txtRecord数据:
extension NetService {
func textRecordField(field: String) -> String?
{
guard
let data = self.txtRecordData(),
let field = NetService.dictionary(fromTXTRecord: data)[field]
else { return nil }
return String(data: field, encoding: String.Encoding.utf8)
}
}