2015-06-26 9 views
9

Ich habe gerade mit Swift 2.0 auf Xcode 7 Beta aktualisiert. Und als ich mein Projekt zu Swift 2.0 aktualisierte, bekam ich diesen Fehler: "Typ 'OSType' entspricht nicht dem Protokoll 'AnyObject' in Swift 2.0". Mein Projekt funktioniert perfekt in Swift 1.2. Und hier ist der Code eine Fehlermeldung anzeigt:Typ 'OSType' entspricht nicht dem Protokoll 'AnyObject' in Swift 2.0

videoDataOutput = AVCaptureVideoDataOutput() 
     // create a queue to run the capture on 
     var captureQueue=dispatch_queue_create("catpureQueue", nil); 
     videoDataOutput?.setSampleBufferDelegate(self, queue: captureQueue) 

     // configure the pixel format    
     **videoDataOutput?.videoSettings = [kCVPixelBufferPixelFormatTypeKey: kCVPixelFormatType_32BGRA]** // ERROR here! 

     if captureSession!.canAddOutput(videoDataOutput) { 
      captureSession!.addOutput(videoDataOutput) 
     } 

Ich versuchte kCVPixelFormatType_32BGRA zu ANYOBJECT zu konvertieren, aber es hat nicht funktioniert. Jeder könnte mir helfen? Entschuldigung für mein schlechtes Englisch! Vielen Dank!

Antwort

33

Dies ist die Definition in kCVPixelFormatType_32BGRASwift 1.2:

var kCVPixelFormatType_32BGRA: Int { get } /* 32 bit BGRA */ 

Dies ist seine Definition in Swift 2.0:

var kCVPixelFormatType_32BGRA: OSType { get } /* 32 bit BGRA */ 

Tatsächlich ist die OSType ist ein UInt32 die nicht implizit zu einem NSNumber konvertieren:

When you write let ao: AnyObject = Int(1) , it isn’t really putting an Int into an AnyObject. Instead, it’s implicitly converting your Int into an NSNumber, which is a class, and then putting that in.

https://stackoverflow.com/a/28920350/907422

Also versuchen Sie dies:

videoDataOutput?.videoSettings = [kCVPixelBufferPixelFormatTypeKey: Int(kCVPixelFormatType_32BGRA)] 

oder

videoDataOutput?.videoSettings = [kCVPixelBufferPixelFormatTypeKey: NSNumber(unsignedInt: kCVPixelFormatType_32BGRA) 
+1

Das in der Tat das Problem löst. Aber Ihre Antwort wäre noch hilfreicher mit einer * Erklärung *, warum dies notwendig ist, insbesondere da der Code von OP in Swift 1.2 funktioniert hat. –

+0

Danke. Für mich geht das. – hiennv92

+1

@MartinR Hallo, ich habe meine Antwort aktualisiert ... Ich hoffe, dass es klarer erklären kann. – Bannings