在文件顶部引用非启动变量
Reference non-initiated variable at top of file
说起来有点奇怪,但基本上我的代码如下:
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
对象的情况下声明 "scan",但与此同时,我无法启动 MTBBarcodeScanner
对象而不调用 "scanner",这在文件顶部是不可能的。不幸的是 MTBBarcodeScanner()
不是一个有效的 init 并且会导致崩溃,所以这也是不可能的。
我需要这样做,因为我需要在代码的不同点访问 "scan" - 而不仅仅是在一种代码方法中。
有什么建议吗?
如果您确定在加载视图后始终拥有 MTBBarcodeScanner
的实例,请将其声明为 MTBBarcodeScanner!
: var scan: MTBBarcodeScanner!
。这使它成为一个隐式展开的可选值,允许它是 nil
除非你试图访问它上面的一些 property/function 。
因此,您应该确保在以任何其他方式访问它之前始终为其分配一些内容。这可以而且应该在 viewDidLoad
:
中完成
scan = MTBBarcodeScanner(previewView: scanner)
您可以让您的 MTBBarCodeScanner
实例成为可选实例,并将其初始设置为 nil
。
var scan: MTBBarcodeScanner? = nil
此后,一旦 scanner
实例可用(例如在 viewDidLoad
中),就调用您的初始化程序更新其值。
说起来有点奇怪,但基本上我的代码如下:
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
对象的情况下声明 "scan",但与此同时,我无法启动 MTBBarcodeScanner
对象而不调用 "scanner",这在文件顶部是不可能的。不幸的是 MTBBarcodeScanner()
不是一个有效的 init 并且会导致崩溃,所以这也是不可能的。
我需要这样做,因为我需要在代码的不同点访问 "scan" - 而不仅仅是在一种代码方法中。
有什么建议吗?
如果您确定在加载视图后始终拥有 MTBBarcodeScanner
的实例,请将其声明为 MTBBarcodeScanner!
: var scan: MTBBarcodeScanner!
。这使它成为一个隐式展开的可选值,允许它是 nil
除非你试图访问它上面的一些 property/function 。
因此,您应该确保在以任何其他方式访问它之前始终为其分配一些内容。这可以而且应该在 viewDidLoad
:
scan = MTBBarcodeScanner(previewView: scanner)
您可以让您的 MTBBarCodeScanner
实例成为可选实例,并将其初始设置为 nil
。
var scan: MTBBarcodeScanner? = nil
此后,一旦 scanner
实例可用(例如在 viewDidLoad
中),就调用您的初始化程序更新其值。