首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量显示为零-快速4 IOS。

变量显示为零-快速4 IOS。
EN

Stack Overflow用户
提问于 2018-12-06 09:28:46
回答 1查看 694关注 0票数 1

由于某种原因,我的变量字符串和字符串正在打印到控制台,但是当我试图将它们设置为标签时,它们显示为零。

我的目标是打印字符串和浮动到应用程序视图控制器,但这是不工作的。

我认为它与视图加载有关,好像它隐藏了全局变量。但是,如果我试图在视图加载之外设置我的标签,我就会得到一个声明错误。

代码语言:javascript
复制
//  ViewController.swift
//  Intellicam
//

import UIKit
import AVKit
import Vision

class ViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate {

    var stringy:String!
    var stringie:Float!

    override func viewDidLoad() {
        super.viewDidLoad()



        //here we start the camera

        let captureSession = AVCaptureSession()
        captureSession.sessionPreset = .photo
        guard let captureDevice = AVCaptureDevice.default(for: .video) else { return }
        guard let input = try? AVCaptureDeviceInput(device: captureDevice) else {return}
        captureSession.addInput(input)
        captureSession.startRunning()

        let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
        view.layer.addSublayer(previewLayer)
        previewLayer.frame = view.frame

        let dataOutput = AVCaptureVideoDataOutput()
        dataOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))
        captureSession.addOutput(dataOutput)

     //   let request = VNCoreMLModel(model: VNCoreMLModel, completionHandler: VNRequestCompletionHandler)
     //   VNImageRequestHandler(cgImage: <#T##CGImage#>, options: <#T##[VNImageOption : Any]#>)

        self.Labele.text = "Guess: \(stringy) + Certainty: \(stringie)"

    }

    func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
        //print("Camera was able to capture a frame:", Date())

        guard let pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else {return}

        guard let model = try? VNCoreMLModel(for: Resnet50().model) else {return}
        let request = VNCoreMLRequest(model: model){
            (finishedReq, err) in
            //print(finishedReq.results)

            guard let results = finishedReq.results as? [VNClassificationObservation] else {return}

             guard let firstObservastion = results.first else {return}


            //print("Guess: \(firstObservastion.identifier) Certainty: \(firstObservastion.confidence)%")

            self.stringy = firstObservastion.identifier
            self.stringie = firstObservastion.confidence

            print(self.stringy)
            print(self.stringie)

        }

        try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:]).perform([request])
    }

    @IBOutlet weak var Labele: UILabel!


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-06 09:33:57

第一件事是,在你确定价值之前,不要强行拆开包装。在你的例子中,VNCoreModelRequest可能会失败,并且你的两个变量都会被不分配,所以它会让你的应用程序崩溃。还有一件事要确保你在标签上使用正确的命名约定。

您的问题是,您没有从正在获得的结果中设置标签值。

来解决这个问题

代码语言:javascript
复制
 var stringy:String? {
    didSet {
        DispatchQueue.main.async {
            self.Labele.text = self.stringy
        }
    }
}

代码语言:javascript
复制
        self.stringy = firstObservastion.identifier
        self.stringie = firstObservastion.confidence
        DispatchQueue.main.async {
             self.Labele.text = "Guess: \(stringy) + Certainty: \(stringie)"
         }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53648206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档