使用两个字符串生成和读取二维码

Generate and read QR with two strings

有什么方法可以在我的二维码中添加额外的字符串吗?

我正在尝试传递两个带键的字符串(在我的情况下都需要)。

所以我的 QR 码应该包含用于编辑 Firestore 值的身份验证 ID 和文档 ID,但找不到好的方法。

    func generateQR(){
    let authId = Auth.auth().currentUser?.uid

    if let myString = docID{
        let data = myString.data(using: .ascii, allowLossyConversion: false)

        let filter = CIFilter(name: "CIQRCodeGenerator")
        filter?.setValue(data, forKey: "inputMessage")

        let ciImage = filter?.outputImage

        let transform = CGAffineTransform(scaleX: 10, y: 10)
        let transformImage = (ciImage?.transformed(by: transform))

        let image = UIImage(ciImage: transformImage!)

        qrView.image = image
    }
}

这里我正在生成我的二维码,正如你在 atm 上看到的那样,我只有 "data",这是文档 ID。

所以现在,不知何故我需要添加一个额外的密钥,它应该包含 "authId",无论如何都可以这样做吗?

二维码阅读功能

func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
    if metadataObjects != nil && metadataObjects.count != 0{
        if let object = metadataObjects[0] as? AVMetadataMachineReadableCodeObject{
            if object.type == AVMetadataObject.ObjectType.qr{

                let arr = object.stringValue!.components(separatedBy:",")
                let docId = arr.first!
                let authId = arr[1]

                let alert = UIAlertController.init(title: "QR Code", message: "Vill du använda denna QR koden?", preferredStyle: .alert)

                alert.addAction(UIAlertAction.init(title: "Ny", style: .cancel, handler: nil))

                alert.addAction(UIAlertAction.init(title: "Använd", style: .default, handler: { (nil) in

                    self.removeDiscountFromFirestore(documentId: docId, authentication: authId)
                }))

                self.present(alert, animated: true)
            }
        }
    }
}

那么如何在我的二维码中传递 2 个字符串?提前致谢。


在 Sh_Khan 的输入后我成功地传递了数据,但它们变成了可选的并且不能用“!”强制。所以我通过添加

来解决这个问题
 let data = "\(String(describing: docID!)),\(authId!)".data(using: .ascii, allowLossyConversion: false)

我在哪里生成二维码。

你可以尝试用 ,

来连接它们
 let data = "\(docId),\(authId)".data(using: .ascii, allowLossyConversion: false)

当你阅读二维码时将它们分开

 let arr = object.stringValue!.components(separatedBy:",")  
 let docId = arr.first!
 let authId = arr[1]