在Swift错误处理中使用未解析的标识符做try语句

时间:2016-07-11 09:36:50

标签: swift error-handling

我刚开始使用快速编程,而且我遇到了错误"使用未解析的标识符'输入'"在以下代码中:

func startReading () -> Bool {

    let captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
    do {
        let input: AnyObject! = try AVCaptureDeviceInput.init(device: captureDevice)
    }
    catch let error as NSError {
        print(error.localizedDescription)
        return false
    }

    captureSession = AVCaptureSession()
    captureSession?.addInput(input as! AVCaptureInput)

错误会停止构建并突出显示此代码的最后一行。我想我理解错误,就是说输入变量可能没有初始化,但我没有看到解决方法。谢谢你的帮助!

4 个答案:

答案 0 :(得分:0)

大括号是Swift中的一个范围。 do块是一个范围。您在do块中声明了input。因此,对于do块之外的代码,input不可见。所以把其余的代码放在do块中。

答案 1 :(得分:0)

有一些错误

  1. 您无法定义到do,然后在其外部使用
  2. 如果没有执行catch,则缺少return语句
  3. 将输入声明为AnyObject没有意义
  4. 这是正确的代码

    func startReading () -> Bool {
    
        let captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
        do {
            let input = try AVCaptureDeviceInput(device: captureDevice)
            let captureSession = AVCaptureSession()
            captureSession.addInput(input)
            return true
        } catch {
            print(error)
            return false
        }
    }
    

答案 2 :(得分:0)

input变量超出了do { }声明的范围。这样做:

   let captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
        do {
            let input: AnyObject! = try AVCaptureDeviceInput.init(device: captureDevice)
    captureSession = AVCaptureSession()
        captureSession?.addInput(input as! AVCaptureInput)
        }
        catch let error as NSError {
            print(error.localizedDescription)
            return false
        }

答案 3 :(得分:0)

正如@matt所描述的那样,do语句的范围限制了<-- index.html --> <!DOCTYPE html> <html> <head> <!-- CSS --> <!-- load up bootstrap and add some spacing --> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css"> <style> body { padding-top:50px; } form { margin-bottom:50px; } </style> <!-- JS --> <!-- load up angular and our custom script --> <script src="http://code.angularjs.org/1.2.13/angular.js"></script> <script src="app.js"></script> </head> <!-- apply our angular app and controller --> <body ng-app="formApp" ng-controller="formController"> <div class="col-xs-12 col-sm-10 col-sm-offset-1"> <h2>Angular Checkboxes </h2> ... <!-- MULTIPLE CHECKBOXES --> <label>Favorite Colors</label> <div class="form-group"> <label class="checkbox-inline"> <input type="checkbox" name="favoriteColors" ng-model="formData.favoriteColors.red"> Red </label><br> <label class="checkbox-inline"> <input type="checkbox" name="favoriteColors" ng-model="formData.favoriteColors.blue"> Blue </label> <br> <label class="checkbox-inline"> <input type="checkbox" name="favoriteColors" ng-model="formData.favoriteColors.green"> Green </label> </div> ... <!-- SHOW OFF OUR FORMDATA OBJECT --> <h2>Sample Form Object</h2> <pre> [[answer]] </pre> </div> </body> </html>声明的可见性。

有一种简单的方法可以解决这个问题,保持所有范围不受影响:只需在外部范围内声明app.yaml

let input