首页 > 解决方案 > 如何在没有 AppDelegate 和 ViewController 的 SwiftUI App 中使用 Linea Pro SDK

问题描述

使用没有 AppDelegate 和 ViewController 的 SwiftUI 构建应用程序时,如何实现 Linea Pro SDK?

我按照此处所述集成了 SDK如何使用 Linea-Pro SDK for IOS?我使用了可以在这里找到的 DTDevices.h 和 libdtdev.a 文件https://github.com/matheuscmpm/lineaswift

现在我编写的用于尝试使用 SDK 的类看起来像这样:

import Foundation

class LineaDevice: DTDeviceDelegate {

private let oScanner: DTDevices

init() {
    self.oScanner = DTDevices()
    self.oScanner.delegate = self
    self.oScanner.connect()
}

func barcodeData(barcode: String!, type: Int32) {
    print("Barcode: \(barcode!)")
}

public func getConnectionState() -> Int32 {
    return self.oScanner.connstate
}

}

在上面的全局范围内,@main我像这样初始化这个类let oLineaScanner = LineaDevice()

到目前为止,一切都很好。该方法oLineaScanner.getConnectionState()返回2,这意味着iOS设备成功连接到扫描仪,当我扫描条形码时,设备会发出哔哔声。但是,barcodeData我认为现在应该由 SDK 调用的方法没有被调用。

到目前为止,我能找到的任何文档都假设有一个 AppDelegate 和一个 ViewController,这在我的 SwiftUI 项目中不存在。我认为这就是这里的问题。我对 iOS 开发相对较新,所以我对如何从这一点开始一无所知。

有什么办法可以让它像这样工作,如果没有,我该如何让它工作?

标签: iosswiftswiftuilinea-pro

解决方案


经过更多的尝试,我终于自己弄清楚了。毕竟需要一个 ViewController 才能让它工作。所以我创建了一个看起来像这样的新文件:

struct LineaView: UIViewControllerRepresentable {

    func makeUIViewController(context: Context) -> LineaViewController { return LineaViewController() }
    func updateUIViewController(_ uiViewController: LineaViewController, context: Context) { }
    func makeCoordinator() -> LineaView.Coordinator { return Coordinator(self) }

}

extension LineaView {

    class Coordinator {
    
        var parent: LineaView
    
        init(_ parent: LineaView) {
            self.parent = parent
        }
    
    }

}

class LineaViewController: UIViewController, DTDeviceDelegate {
    // function barcodeData() is implemented here and other related logic for that matter. Don't forget to implement viewDidLoad() where you connect to the device
}

然后我只需将此 LineaView 添加到包含其他所有内容的视图(在我的情况下为 TabView),如下所示:

LineaView().hidden()

这对我有用。该应用程序现在按预期响应条形码扫描。

对于其他人面临此问题的不太可能发生的事件,请继续。希望我能免除你的痛苦。


推荐阅读