在文件

时间:2016-01-09 23:42:29

标签: swift variable-declaration

这有点奇怪,但基本上我的代码如下:

import UIKit

class BarcodeScanPopover: UIViewController, UIPopoverPresentationControllerDelegate {
    @IBOutlet weak var navbar: UINavigationItem!
    @IBOutlet weak var product: UILabel!
    @IBOutlet weak var productimage: UIImageView!
    @IBOutlet weak var scanner: UIView!
    var scan: MTBBarcodeScanner = MTBBarcodeScanner(previewView: scanner);
    override func viewDidLoad() {

所以我遇到的问题是我无法宣布"扫描"在没有启动MTBBarcodeScanner对象的情况下,但同时,我无法调用MTBBarcodeScanner对象而不会调用" scanner"这在文件的顶部是不可能的。不幸的是,MTBBarcodeScanner()不是有效的初始化并导致崩溃,因此也不可能。

我需要这样做,因为我需要访问"扫描"在代码中的不同点 - 不只是在一个代码方法中。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

如果您确定在加载视图后将始终拥有MTBBarcodeScanner的实例,请将其声明为MTBBarcodeScanner!var scan: MTBBarcodeScanner!。这使得它成为一个隐式解包的可选项,除非您尝试访问它上面的某些属性/函数,否则允许它为nil

因此,您应该确保在以任何其他方式访问它之前始终为其分配内容。这可以而且应该在viewDidLoad中完成:

scan = MTBBarcodeScanner(previewView: scanner)

答案 1 :(得分:1)

您可以让MTBBarCodeScanner个实例成为可选项,并最初将其设置为nil

var scan: MTBBarcodeScanner? = nil

此后,只要scanner实例可用,请立即致电初始值设定项以更新其值(例如,在viewDidLoad中)。