2016-11-21 2 views
0

ItemID 전역 값을 만들어 외부 함수에 액세스 할 수 있도록하고 싶습니다. 클래스 바로 아래에 정의하려고 시도했지만 작동하지 않습니다. 다른 함수가 액세스 할 수있는 함수 내에서 값을 만들려면 어떻게해야합니까? 글로벌 함수 내에서 값을 만드는 방법

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) 
         }) 
    }} 

은 내가 이전 기능

+0

무엇에 대해 '일을하지 않았다'여기 문제, 작동하는 템플릿의 경우? – Wez

+0

itemID가 표시되지 않습니다. ItemID를 인쇄하기 위해 enterNewItemID 함수를 수정했지만 아무 것도 표시되지 않았습니다. –

답변

1

에서 항목 ID를 인식하지 못합니다 어떤 이유로 항목 ID

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) 

} 

를 호출 같이 어딘가에 기능 이상을 넣어하고자하는 기능입니다.

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

그런 다음이 기능에 액세스 할 수 있어야합니다.

itemID = metadataObj.stringValue! 
let itemToSearchFor = itemID 

수정할 수 있도록 var을 사용해야합니다.

0

모든 것이 올바르게 수행 된 것 같습니다. "클래스 바로 아래에서 정의하려고 시도한"코드를 제공하는 것을 잊었습니다.

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. 
    } 
} 

콘솔 출력은 다음과 같습니다 :

ID #1 
ID #2 
관련 문제