2016-11-21 2 views
0

machen möchte Ich möchte den Wert von ItemID global machen, so dass ich es außerhalb der Funktion zugreifen kann. Ich habe versucht, es direkt unterhalb der Klasse zu definieren, aber es funktioniert nicht. Wie sonst kann ich einen Wert in einer Funktion machen, auf die andere Funktionen zugreifen können?Wie man einen Wert innerhalb einer Funktion global

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) { 

    // Check if the metadataObjects array is not nil and it contains at least one object. 
    if metadataObjects == nil || metadataObjects.count == 0 { 
     qrCodeFrameView?.frame = CGRect.zero 
     messageLabel.text = "No QR/barcode is detected" 
     return 
    } 
    //Get metadata object 
    let metadataObj = metadataObjects[0] as! AVMetadataMachineReadableCodeObject 

    if supportedCodeTypes.contains(metadataObj.type) { 
     //if the found metadata is equal to the QR code metadata then update the status label's text and set the the bounds 
     let barCodeObject = videoPreviewLayer?.transformedMetadataObject(for: metadataObj) 
     qrCodeFrameView?.frame = barCodeObject!.bounds 

     if metadataObj.stringValue != nil { 
      messageLabel.text = metadataObj.stringValue 
      //Searches firebase for existing barcode 
      } 
      let itemID = metadataObj.stringValue! 
      let itemToSearchFor = itemID 

      guard let Description = productDescriptionTextField.text, 
      let price = priceTextField.text, 
      let location = productLocationTextField.text 
      else{ 
       print("Fill basic product information") 
       return 
      } 
      let ref = FIRDatabase.database().reference(fromURL: "/") 
      // creating an item child node 
      let values = ["Item Description": Description, "Image": price, "Location": location, "Price": price] 
      let items = ref.child("Items").child(itemID) 
      items.updateChildValues(values, withCompletionBlock: { (err, ref) in 
       if err != nil { 
        print(err) 
        return 
       } }) 
      FIRDatabase.database().reference().child("Items").child(itemToSearchFor).observeSingleEvent(of: .value, with:{(snap) in 
        print(snap) 
         }) 
    }} 

Dies ist die Funktion, wo ich anrufen itemID

aus irgendeinem Grund
func enterNewProduct() { 

    guard let Description = self.productDescriptionTextField.text, 
     let price = self.priceTextField.text, 
     let location = self.productLocationTextField.text 
     else{ 
      print("Fill basic product information") 
      return 
    } 

    let ref = FIRDatabase.database().reference(fromURL: "/") 
    // creating an item child node 
    let values = ["Item Description": Description, "Image": price, "Location": location, "Price": price ] 
    let items = ref.child("Items").child(itemID) 
    items.updateChildValues(values, withCompletionBlock: { (err, ref) in 
     if err != nil { 
      print(err) 
      return 
     } }) 


    self.dismiss(animated: true, completion: nil) 

} 

wollen es die itemID von der vorherigen Funktion ist nicht

+0

Was es hat nicht funktioniert "? – Wez

+0

es erhält nicht die itemID. Ich habe die Funktion enterNewItemID geändert, um ItemID nur zu drucken, aber es kam nichts. –

Antwort

1

es über die Funktion irgendwo wie das Setzen erkennen.

var itemID:String! 
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) { 

Dann in Ihrer Funktion sollten Sie in der Lage sein, so auf sie zuzugreifen.

itemID = metadataObj.stringValue! 
let itemToSearchFor = itemID 

Stellen Sie sicher, var zu verwenden, so dass Sie es ändern können.

0

Es klingt, als hätten Sie alles richtig gemacht. Sie haben vergessen, den Code anzugeben, bei dem Sie versucht haben, ihn direkt unterhalb der Klasse zu definieren. Für den Fall, dass die Frage, hier ist eine Vorlage, die funktioniert:

class ViewController: UIViewController { 

    var myID = "ID #1" 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     changeID() 
     printID() 
    } 
    func changeID() { 
     printID() 
     myID = "ID #2" 
    } 
    func printID() { 
     print(myID) 
    } 
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

Die Konsolenausgabe ist:

ID #1 
ID #2 
Verwandte Themen