title: Accessing Camera in Swift 2 iOS
body: <p>I am trying to access camera and take a picture in my iPad app, below is the code which works for swift 1.2 but is failing with 3 types of errors(highlighted below in BLOCK comments) in Swift 2. I have spent time looking for swift 2 way of writing it but haven't gotten anywhere. Any suggestion is highly appreciated.</p>
  <pre><code>import UIKit
  import AVFoundation
  
  class PictureController: UIViewController {
      
      let captureSession = AVCaptureSession()
      var previewLayer : AVCaptureVideoPreviewLayer?
      
      // If we find a device we'll store it here for later use
      var captureDevice : AVCaptureDevice?
      
      override func viewDidLoad() {
          super.viewDidLoad()
          
          // Do any additional setup after loading the view, typically from a nib.
          captureSession.sessionPreset = AVCaptureSessionPresetHigh
          
          let devices = AVCaptureDevice.devices()
          
          // Loop through all the capture devices on this phone
          for device in devices {
              // Make sure this particular device supports video
              if (device.hasMediaType(AVMediaTypeVideo)) {
                  // Finally check the position and confirm we've got the back camera
                  if(device.position == AVCaptureDevicePosition.Back) {
                      captureDevice = device as? AVCaptureDevice
                      if captureDevice != nil {
                          print(&quot;Capture device found&quot;)
                          beginSession()
                      }
                  }
              }
          }
          
      }
      
      func focusTo(value : Float) {
          if let device = captureDevice {
              if(device.lockForConfiguration(nil)) { // CALL CAN THROW BUT IS NOT MARKED WITH 'TRY' AND THE ERROR IS NOT HANDLED
  // nil IS NOT COMPATIBLE WITH EXPECTED ARGUMENT TYPE '()'
                  device.setFocusModeLockedWithLensPosition(value, completionHandler: { (time) -&gt; Void in
                      //
                  })
                  device.unlockForConfiguration()
              }
          }
      }
      
      let screenWidth = UIScreen.mainScreen().bounds.size.width
      override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { //METHOD DOES NOT OVERRIDE ANY METHOD FROM SUPERCLASS
          let anyTouch = touches.anyObject() as! UITouch
          let touchPercent = anyTouch.locationInView(self.view).x / screenWidth
          focusTo(Float(touchPercent))
      }
      
      override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { //METHOD DOES NOT OVERRIDE ANY METHOD FROM SUPERCLASS
          let anyTouch = touches.anyObject() as! UITouch
          let touchPercent = anyTouch.locationInView(self.view).x / screenWidth
          focusTo(Float(touchPercent))
      }
      
      func configureDevice() {
          if let device = captureDevice {
              device.lockForConfiguration(nil) // CALL CAN THROW BUT IS NOT MARKED WITH 'TRY' AND THE ERROR IS NOT HANDLED
  // nil IS NOT COMPATIBLE WITH EXPECTED ARGUMENT TYPE '()'
              device.focusMode = .Locked
              device.unlockForConfiguration()
          }
          
      }
      
      func beginSession() {
          
          configureDevice()
          
          var err : NSError? = nil
          captureSession.addInput(AVCaptureDeviceInput(device: captureDevice, error: &amp;err)) 
  // Cannot invoke initializer for type 'AVCaptureDeviceInput' with an argument list of type '(device: AVCaptureDevice?, error: inout NSError?)'
          
          if err != nil {
              print(&quot;error: \(err?.localizedDescription)&quot;)
          }
          
          previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
          self.view.layer.addSublayer(previewLayer)
          previewLayer?.frame = self.view.layer.frame
          captureSession.startRunning()
      }
      
      
  }
  </code></pre>
  <p>error 1: Call can throw, but it is not marked with 'try' and the error is not handled
  Type '()' does not conform to protocol 'BooleanType'</p>
  <p>error 2: Method does not override any method from its superclass
  for touchesBegan and touchesMoved</p>
  <p>error 3: Cannot invoke initializer for type 'AVCaptureDeviceInput' with an argument list of type '(device: AVCaptureDevice?, error: inout NSError?)'</p>
  <p><strong>UPDATE:</strong></p>
  <p>ALL OTHER ISSUES ARE FIXED (please ref comments if you are looking for solutions), EXCEPT FOR THE BELOW ONE.</p>
  <pre><code>func focusTo(value : Float) {
          if let device = captureDevice {
              if(device.lockForConfiguration()) { // THIS LINE IS THROWING BELOW MENTIONED ERROR
                  device.setFocusModeLockedWithLensPosition(value, completionHandler: { (time) -&gt; Void in
                      
                  })
                  device.unlockForConfiguration()
              }
          }
      }
  </code></pre>
  <p>ERROR:</p>
  <blockquote>
  <p>Type '()' does not conform to protocol 'BooleanType'</p>
  <p>Call can throw, but it is not marked with 'try' and the error is not handled</p>
  </blockquote>