如何在其他地方使用 barcodescanner 的结果?

How to use result from barcodescanner somewhere else?

所以我有一个条形码扫描按钮,我想按下它并扫描一个项目,然后检索条形码并在另一个按钮中使用检索到的条形码(这将发送带有条形码的 api 请求),我该怎么做?

如果有人能指出我正确的方向,我会很高兴,似乎无法在网上找到任何答案(可能是搜索错误的东西)。

提前致谢!

这是我的部分代码:


import UIKit
import AVFoundation
import QRCodeReader
import Alamofire




class NewViewController: UIViewController, QRCodeReaderViewControllerDelegate {
    
    lazy var readerVC: QRCodeReaderViewController = {
    let builder = QRCodeReaderViewControllerBuilder {
    //change object to scan and the initial position of the camera
        [=10=].reader = QRCodeReader(metadataObjectTypes: [.qr, .ean13], captureDevicePosition: .back)

    // Configure the view controller (optional)
    [=10=].showTorchButton = true
    [=10=].showSwitchCameraButton = false
    [=10=].showCancelButton = true
    [=10=].showOverlayView = true //shows the square area of the QRCode Scanner
        [=10=].rectOfInterest = CGRect(x: 0, y: 0, width: 1, height: 1)
        
        //[=10=].rectOfInterest = CGRect(x: 0.12, y: 0.3, width: 0.8, height: 0.6)
    }
    return QRCodeReaderViewController(builder: builder)
    }()
    

    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        readerVC.delegate = self
    
    }
    
    func reader(_ reader: QRCodeReaderViewController, didScanResult result: QRCodeReaderResult) {
    //code to be added
        reader.stopScanning()
        print(result)
        print(result.value) //I WANT TO USE THIS RESULT SOMEWHERE ELSE //ANOTHER BUTTON
        dismiss(animated: true, completion: nil)
    }

    func readerDidCancel(_ reader: QRCodeReaderViewController) {
    //code to be added
        reader.stopScanning()
        dismiss(animated: true, completion: nil)
    }
    
    
    
        @IBAction func BARCODESCANNER(_ sender: UIButton) {

            readerVC.modalPresentationStyle = .formSheet
            self.present(readerVC, animated: true)

           //THIS BUTTON OPENS THE BARCODE SCANNER AND RETRIEVES RESULT IN THE "func reader" ABOVE
        
    }
    

    
    @IBAction func ANOTHERBUTTON(_ sender: Any) {
        
        // I WANT TO USE THE RETRIEVED BARCODE HERE WITH MORE CODE FOR AN API REQUEST
        
    }
    
}

你已经差不多了。这里缺少的是一个额外的变量,用于存储条形码扫描结果。

在你的视图控制器上添加如下内容: private var barcode: String? = nil

得到reader(_: QRCodeReaderViewController, didScanResult: QRCodeReaderResult)中的结果即可赋值。

现在因为 barcode 被添加为可选 属性,在您的 ANOTHERBUTTON 函数中,您可以通过使用guard.

所以这看起来像:

@IBAction func ANOTHERBUTTON(_ sender: Any) {
    guard let barcode = barcode else { return }
    // ... your code using the barcode goes here
}

您现在应该可以继续构建视图了。