在swift中的classes / viewcontrollers之间传递let值

时间:2016-05-27 18:59:35

标签: ios swift

我有一个包含各种类文件的项目。我有一个条形码扫描仪,我从在线来源使用它输出警报控制器中的值。我想要做的是获取条形码值并将其传递回我的主类,并使用函数解析它并将其显示在相关标签中。出于某种原因,如果任何人有任何想法会很棒,我就无法做到这一点。我花了一整天的时间试图弄明白这一点,没有任何运气。

barcodeScanner类相关部分

/* AVCaptureMetadataOutputObjectsDelegate */

func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {

    if alertController != nil {
        return
    }

    if metadataObjects != nil && metadataObjects.count > 0 {
        if let machineReadableCode = metadataObjects[0] as? AVMetadataMachineReadableCodeObject {
            // get the barcode string
            let type = machineReadableCode.type
            let barcode = machineReadableCode.stringValue

我需要将条形码上面的值放到passengerInformation类中,它将通过submitCodeAuto函数传递给标签。

            passengerInformation().self.submitCodeAuto(barcode)

我对它的破解似乎不起作用..

            // display the barcode in an alert
            let title = "Barcode"
            let message = "Type: \(type)\nBarcode: \(barcode)"
            displayAlert(title, message: message)
        }

    }
}

}

乘客信息类

@IBOutlet weak var firstNameResponse: UILabel!
@IBOutlet weak var lastNameResponse: UILabel!

@IBAction func submitCodeAuto(sender: AnyObject!) {
   firstNameResponse.text = barcodeProtocol(barcode).firstName
   lastNameResponse.text = barcodeProtocol(barcode).lastName
}

在submitCodeAuto函数上方还通过另一个名为barcodeProtocol的函数发送传入的条形码,该函数将其格式化,允许检索名字和姓氏。

我目前使用barcodeProtocol运行文本字段值的按钮测试标签,并在标签中显示以便所有标签都正常工作。

我还连接了一个新的viewcontroller按钮,扫描仪类工作正常。显示相机扫描并显示值。

但我一直无法加入他们。该应用程序返回致命错误:在展开可选值时意外发现nil

任何帮助都会非常感谢。

2 个答案:

答案 0 :(得分:1)

在你的功能中:

@IBAction func submitCodeAuto(sender: AnyObject!) {
   firstNameResponse.text = barcodeProtocol(barcode).firstName
   lastNameResponse.text = barcodeProtocol(barcode).lastName
}

你从哪里得到'条形码'?

尝试用

替换它
@IBAction func submitCodeAuto(sender: AnyObject!) {
   firstNameResponse.text = barcodeProtocol(sender as! String).firstName
   lastNameResponse.text = barcodeProtocol(sender as! String).lastName
}

我假设您的方法barcodeProtocol接受任何字符串并完美地将其解析为firstname和lastname

答案 1 :(得分:-1)

您的代码充满了问题。

您可以从passengerInformation代码创建barcodeScanner类的新实例,调用submitCodeAuto()方法,然后忘记新创建的passengerInformation对象。 (大概它是一个视图控制器。)

创建新的视图控制器,向其发送消息然后忘记它是没有意义的。那不会做任何事情。您可能希望从故事板中实例化自定义passengerInformation视图控制器,在视图控制器中设置barcode字符串属性,然后使用presentViewController:animated:completion:以模态方式呈现它。在passengerInformation视图控制器的viewWillAppear方法中,您应该使用条形码属性,从中提取所需信息,然后将其安装到文本字段中。

即使您没有以这种方式使用,submitCodeAuto()方法也会被声明为IBAction。它需要您忽略的参数sender,而是使用您不会显示的变量barcode

您的submitCodeAuto()函数可能应该使用String类型的参数barcode,因为它似乎正在做什么。

你有几个班级的名字以小写字母开头。类名应以大写字母开头。

相关问题