2017-01-27 1 views
0

Étant donné que AVCaptureDevice.devices est déprécié dans iOS 10, j'essaie d'ajuster cet exemple de code à AVCaptureDeviceDiscoverySession.AVCaptureDevice.devices ajustée à AVCaptureDeviceDiscoverySession

var error: NSError? 
var captureSession: AVCaptureSession? 
var backVideoDevice: AVCaptureDevice? 
//let videoDevices = AVCaptureDevice.devices(withMediaType: AVMediaTypeVideo) // .devices DEPRECIATED 

//iOS 10 
let videoDevices = AVCaptureDeviceDiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: .back) 

// Get back video device 
if let videoDevices = videoDevices 
{ 
    for captureDevice in videoDevices 
    { 
     if (captureDevice as AnyObject).position == AVCaptureDevicePosition.back 
     { 
      backVideoDevice = captureDevice as? AVCaptureDevice 
      break 
     } 
    } 
} 

Et là, je suis coincé, une erreur se sur cette ligne

for captureDevice in videoDevices 

au point videoDevices et dit: Type « AVCaptureDeviceDiscoverySession » ne se conforme pas au protocole « séquence ».

Où ou quoi est-ce que je manque ou supervise? THX.

Répondre

1

La fonction retourne un objet de type AVCaptureDeviceDiscoverySession, et vous devez accéder à la propriété devices de ce pour obtenir le tableau que vous attendiez:

let session = AVCaptureDeviceDiscoverySession.init(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: .back) 
    if let device = session?.devices[0] { 
     backVideoDevice = device 
    } 

Notez que vous ne avez plus besoin de boucler sur tous les appareils que le AVCaptureDeviceDiscoverySession ne renvoie que les périphériques avec un position de .back en premier lieu. Comme il n'y en aura qu'un, vous le trouverez au devices[0].